一.背景
用的windows server 2019服务器,mysql8.0.34,还是应该每天备份一下。以前做了很多次,主要是带了2个徒弟,还是要写出来。
二.备份脚本
chcp 936
set date_tmp=%date:~0,10%
set datetime=%date_tmp:/=%%time:~0,2%%time:~3,2%%time:~6,2%
set executeback=mysqldump -uroot -proot --default-character-set=utf8 --ignore-table=panguaxe.belt_weigher --ignore-table=panguaxe.quality_data panguaxe --result-file=C:SoftwareDownloadsdbbacks%datetime%.sql
echo %executeback%
cmd /k %executeback%
三.相关知识及脚本说明
1.windows的dos下,获取当前日期字符串
第一行:chcp 936
是指定当前dos窗口使用gbk字符集。
第二行和第三行:
set date_tmp=%date:~0,10%
set datetime=%date_tmp:/=%%time:~0,2%%time:~3,2%%time:~6,2%
实现了取出年月日时分秒字符串,赋值给datetime这个变量。格式例如:20240112165412
2.windows的dos下,把一个字符串作为命令去执行
第六行:cmd /k %executeback%
就是把变量executeback对应的字符串值作为windows的dos命令去执行。
3.mysqldump导出时忽略表、指定导出文件、指定字符集解决乱码
第四行:
set executeback=mysqldump -uroot -proot –default-character-set=utf8 –ignore-table=panguaxe.belt_weigher –ignore-table=panguaxe.quality_data panguaxe –result-file=C:SoftwareDownloadsdbbacks%datetime%.sql
拼凑了mysqldump导出命令的字符串。
其中,–ignore-table=数据库.表名1 就是写忽略哪个表不导出,可以写多个。
–result-file=xx.sql就是指定导出文件
–default-character-set=utf8 就是指定导出的字符集,解决乱码。根据实际情况,如果数据库是gbk就用gbk,看数据库具体是啥。看数据库字符集的命令可以用 SHOW CREATE DATABASE your_database_name;
ps:我在过程中还遇到了特殊问题,就是指定了字符集仍然是乱码。原因是我用的类似这样的命令来指定的导出文件。mysqldump -uroot -proot –default-character-set=utf8 >xx.sql
用>来指定文件是windows的命令,跟windos当前dos窗口的字符集有关,所以不管怎么指定字符集都会是乱码。所以要采用mysqldump的–result-file来指定文件就不会是乱码。
我测试过,如果指定数据库字符集是utf8,指定dos窗口的字符集也是utf8,不指定mysqldump的字符集,使用>符合指定导出文件,中文也不会乱码。当然mysql.ini我是指定了默认字符集为utf8的。测的如下:
chcp 65001
set date_tmp=%date:~3,10%
set datetime=%date_tmp:/=%%time:~0,2%%time:~3,2%%time:~6,2%
mysqldump -uroot -proot --ignore-table=panguaxe.belt_weigher --ignore-table=panguaxe.quality_data panguaxe >C:SoftwareDownloadsdbbacks%datetime%.sql
4.时间格式出现空格导致无法导出的问题
C:UsersDell>set date_tmp=%date:~3,10%
C:UsersDell>set datetime=%date_tmp:/=%%time:~0,2%%time:~3,2%%time:~6,2%
C:UsersDell>echo %datetime%
20240115 84412
C:UsersDell>echo %time%
8:44:41.30
C:UsersDell>set datetime=%datetime: =0%
C:UsersDell>echo %datetime%
20240115084412
当时间是2024-01-15 08:44:41时,time的输出并非是预期的08:44:41.30,而第1个本该是0的位置显示为空。所以就用到了把空替换为0的这句话,如下:
set datetime=%datetime: =0%
原文地址:https://blog.csdn.net/qq_37372909/article/details/135554934
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_56438.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!