时间:2022-12-06来源:www.pcxitongcheng.com作者:电脑系统城
环境:阿里云服务器(windows server)、mysql(8.0.11)
1 2 3 4 5 6 7 |
mysql> select @@version; + -----------+ | @@version | + -----------+ | 8.0.11 | + -----------+ 1 row in set |
在windows服务器中每天备份一次数据库数据,防止出现各种意外。这里就使用了mysql的 mysqldump 服务来导出备份,备份初始脚本如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@ echo off set hour=% time :~0,2% if "%time:~0,1%" == " " set hour=0% time :~1,1% set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2% echo %now% set host=127.0.0.1 set port=3306 set user=root set pass=马赛克 # 要备份的数据库,这里我项目的数据库是 xxx_project set dbname=xxx_project # 备份文件所在的位置,这里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名称 set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql # 运行备份命令 C:\mysql-8.0.11-winx64\bin\mysqldump 是我 mysql 安装目录下 mysqldump 所在的位置 "C:\mysql-8.0.11-winx64\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% -c --add-drop-table %dbname% > %backupfile% echo delete files before 10 days forfiles /p E:\MysqlDataBackups /s /m *.sql /d -60 /c "cmd /c del @file /f" @ echo on |
命令保存为 bat 文件,双击执行,能成功在 C:\MysqlDataBackups\ 下面生成一个文件
但是,当我们打开文件看的时候,发现里面的备注,中文相关的都是乱码(PS:Notepad++ 软件打开不会,可能是因为这个软件比较智能)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> show variables like '%char%' ; +--------------------------+----------------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | C:\mysql-8.0.11-winx64\share\charsets\ | +--------------------------+----------------------------------------+ 8 rows in set |
上面几个变量说明:
如果上面编码不对的话,想快速设置的话执行:set character_set_results = utf8;
上面这个只在当前终端有效,如果想永久保存的话还是需要修改my.ini
的配置文件。
网上很多说法是 Windows PowerShell 输出重定向 (“>”) 文件编码默认为UTF-16(LE)问题,解决办法都是把命令拿去 cmd 中执行 ,但是我们这里是写成脚本了,在cmd中执行是手动执行,虽然不是乱码,但是我们放在脚本中执行就出现乱码了,这个办法显然对于我来说是不可行的。
1 | mysqldump -uroot -p --add-drop-table xxx_project > D:\xxx.sql |
还有的文章说在导出的命令上加上各种编码参数,如:--default-character-set=utf8
1 | mysqldump -uroot -proot --add-drop-table --default-character- set =utf8 xxx_project > D:\xxx.sql |
在网上发现另一个参数--hex-blob
, 这个参数主要是为了把BINARY
, VARBINARY
, BLOB
, BIT
等类型导出为十六进制,因为这些类型比较容易乱码。再次尝试:
1 | mysqldump -uroot -proot --add-drop-table --default-character- set =utf8 --hex-blob xxx_project > D:\xxx.sql |
打开文件后依然乱码
这段话翻译过来就是:
说明:
在Windows上使用带有输出重定向的PowerShell生成的转储文件将创建一个具有UTF-16编码的文件:
mysqldump [options] > dump.sql
但是,UTF-16不允许作为连接字符集(请参阅不允许的客户端字符集),因此无法正确加载转储文件。要解决这个问题,使用——result-file选项,它会创建ASCII格式的输出:
mysqldump [options] --result-file=dump.sql
1 | mysqldump -uroot -proot --add-drop-table --default-character- set =utf8 --hex-blob xxx_project --result- file =C:\MysqlDataBackups\xxx.sql |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@ echo off set hour=% time :~0,2% if "%time:~0,1%" == " " set hour=0% time :~1,1% set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2% echo %now% set host=127.0.0.1 set port=3306 set user=root set pass=马赛克 # 要备份的数据库,这里我项目的数据库是 xxx_project set dbname=xxx_project # 备份文件所在的位置,这里我固定放在 C:\MysqlDataBackups\ 下面,%dbname%-%now%.sql 是要生成的文件名称 set backupfile=C:\MysqlDataBackups\%dbname%-%now%.sql #用 bat 命令先创建文件 backupfile,然后在用 mysqldump 往这个文件中 写入数据 echo =>%backupfile% "C:\mysql-8.0.11-winx64\bin\mysqldump" -h%host% -P%port% -u%user% -p%pass% --default-character- set =utf8 --hex-blob -c --add-drop-table %dbname% --result- file =%backupfile% echo delete files before 10 days forfiles /p E:\MysqlDataBackups /s /m *.sql /d -60 /c "cmd /c del @file /f" @ echo on |
最后看看效果
最后我们用 windows 的定时任务在每天凌晨三点的时候执行这个 bat 脚本,就能做到一天备份一次数据库拉。
到此这篇关于Windows 服务器中使用 mysqldump 命令导出数据,解决中文乱码问题的文章就介绍到这了
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17