環境:阿里雲伺服器(windows server)、mysql(8.0.11)
mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.11 |
+-----------+
1 row in set
@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++ 軟體開啟不會,可能是因為這個軟體比較智慧)
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
的組態檔。
mysqldump -uroot -p --add-drop-table xxx_project > D:\xxx.sql
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 xxx_project > D:\xxx.sql
--hex-blob
, 這個引數主要是為了把BINARY
, VARBINARY
, BLOB
, BIT
等型別匯出為十六進位制,因為這些型別比較容易亂碼。再次嘗試: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
mysqldump -uroot -proot --add-drop-table --default-character-set=utf8 --hex-blob xxx_project --result-file=C:\MysqlDataBackups\xxx.sql
@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