方案一:采用mysql自帶的工具mysqldump。
腳本文件backup.bat如下:
set "YMD=%date:~,4%%date:~5,2%%date:~8,2%"
cd /d C:\Program Files\MySQL\MySQL Server 5.7\bin
mysqldump --no-defaults -uroot -p"501501" sdxs > E:/databaseBackupData/sdxs/sdxs_%YMD%.sql
解釋如下:
1、set "YMD=%date:~,4%%date:~5,2%%date:~8,2%" 表示給變量YMD賦值為執行該腳本時的年月日,比如為20180505。
2、cd /d C:\Program Files\MySQL\MySQL Server 5.7\bin 表示切換cmd目錄到C:\Program Files\MySQL\MySQL Server 5.7\bin中。特別注意 /d 必須加上。否則失敗。
3、mysqldump --no-defaults -uroot -p"501501" sdxs > E:/databaseBackupData/sdxs/sdxs_%YMD%.sql
表示執行mysqldump 命令。--no-defaults 的作用主要是解決執行該命令出現error的--no-beep。即如下圖錯誤。
4、完整的mysqldump命令表示如下:
mysqldump --no-defaults
--host=120.120.120.120
--port=3306
--user=root
--password=501501
--events
--routines
--triggers
--flush-logs
--add-drop-database
--add-drop-table
--add-locks
--complete-insert
--default-character-set=utf8
(--lock-all-tables) 一般不用
--log-error=E:/databaseBackupData/sdxs/sdxs_%YMD%.err
(--no-data) 一般不用
--single-transaction
--master-data=2
--databases sdxs
> E:/databaseBackupData/sdxs/sdxs_%YMD%.sql
如果添加 --no-data 選項,則只備份結構不會備份數據。
--host=127.0.0.1 用於指定mysql數據庫所在的ip地址,這里指定為本地的ip 。因此可以遠程備份,異地備份,該選項用於指定備份哪一台機器上的mysql數據庫。
--port=3306 用於指mysql定數據庫服務使用的端口,這里指定為3306端口 。
--databases 數據庫A,數據庫B,數據庫C等,用於指定備份指定mysql服務器的哪些數據庫。如果備份這台mysql服務器上的所有的數據庫的所有表,則用 --all-databases 選項,真正在生產環境中,我們應該導出的是整個mysql服務器中的數據,而不是單個庫,因此應該使用--all-databases。
--user="igoodful" 用於指定數據庫的用戶名,這里指定用戶名為igoodful 。
--password="123456" 表示該數據庫用戶的密碼,這里是給igoodful用戶指定的密碼為123456 。
--comments="很好" 表示給備份文件添加注釋。
--default-character-set=utf8 表示該數據庫使用的默認字符集 。
--events 表示數據庫的事件也會備份,默認不會備份事件。
--routines 表示導出存儲過程以及自定義函數,默認不會備份存儲過程以及自定義函數。
--triggers 表示數據庫的觸發器也會備份,默認會備份觸發器。
--flush-logs 表示日志滾動一次,以免日志不一致。
--add-drop-database 表示每個數據庫創建之前會先執行drop對應的數據庫,即會在備份文件中先執行drop 對應的數據庫操作。
--add-drop-table 表示每個數據表創建之前會先執行drop對應的數據表,即會在備份文件中先執行drop 對應的數據表操作。默認執行drop,可以添加--skip-add-drop-table取消drop。
--add-locks 在每個表導出之前增加LOCK TABLES並且之后UNLOCK TABLE。(默認為打開狀態,使用--skip-add-locks取消選項)
--complete-insert 表示使用完整的insert語句(包含列名稱)。這么做能提高插入效率,但是可能會受到max_allowed_packet參數的影響而導致插入失敗。
--default-character-set=utf8 表示指定的字符集。
--lock-all-tables 表示提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖。與--single-transaction 互斥
--log-error=E:/databaseBackupData/sdxs/sdxs_%YMD%.err 表示附加警告和錯誤信息到給定文件。
--no-data 表示不導出任何數據,只導出數據庫表結構。
--single-transaction 表示該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。該選項實現熱備份。熱備(hot backup):備份的同時,業務不受影響。
--master-data=2 表示mysqldump導出數據時,當這個參數的值為1的時候,mysqldump出來的文件就會包括CHANGE MASTER TO這個語句,CHANGE MASTER TO后面緊接着就是file和position的記錄,在slave上導入數據時就會執行這個語句,salve就會根據指定這個文件位置從master端復制binlog。默認情況下這個值是1。當這個值是2的時候,chang master to也是會寫到dump文件里面去的,但是這個語句是被注釋的狀態。記錄備份那一時刻的二進制日志的位置。
備份到120的有:
備份到106的有:bat存放腳本文件,data存放備份的數據數據
5、備份后使用備份的sql文件時,特別注意下面的語句。會創備份的建數據庫(如果不存在該庫),而且使用創建的數據庫來執行備份中的sql語句。