參考連接:
https://www.cnblogs.com/f-ck-need-u/archive/2018/05/09/9013458.html#auto_id_0html
備份多個庫。
mysqldump -uroot -p123456 -S /tmp/mysql.sock --databases backuptest backuptest1 >/tmp/mutil_db.bakmysql
備份全部庫。
mysqldump -uroot -p123456 -S /tmp/mysql.sock --all-databases >/tmp/all_db.baksql
備份時亂碼:
使用字符集選項示例
dump數據的時候,客戶端和數據庫的字符集不一致的話會進行字符集轉換,轉換的過程是不可逆的,因此有可能會致使亂碼。shell
例如,插入一個帶有中文字符的記錄到字符集爲latin1的表student中。數據庫
insert INTO backuptest.`student` VALUES (6,'馬','male','2017-03-31');
若是提示沒法插入,則設置客戶端字符集和鏈接字符集爲latin1,character_set_client、character_set_connection、character_set_results,使用set names latin1便可,它會設置它們3個。網絡
插入成功以後,其餘會話鏈接數據庫查詢將會是亂碼的。dump的時候也是亂碼的,由於dump默認會使用utf8字符集,在latin1轉碼爲utf8的過程當中出現了亂碼。oracle
shell> mysqldump -uroot -p123456 -S /mydata/data/mysql.sock --databases backuptest >/tmp/backuptest.bak
shell> grep -i 'insert' /tmp/backuptest.bak
INSERT INTO `student` VALUES (1,'malongshuai','male','2017-03-31'),(2,'gaoxiaofang','female','2015-03-31'),(3,'longshuai','male','2012-03-31'),(4,'meishaonv','female','2014-03-31'),(5,'tun\'er','female','2013-03-31'),(6,'马','male','2017-03-31');
INSERT INTO `teacher` VALUES (1,'wugui','male','計算機網絡'),(2,'woniu','female','C語言'),(3,'xiaowowo','female','oracle');
再使用亂碼的文件來恢復的話,確定是亂碼的結果。測試
這時能夠指定dump時的字符集爲latin1來使得dump數據時無需轉換字符集。ui
sudo mysqldump --all-databases --user=root --password --master-data > backupdb.sql計算機網絡
mysqldump: Error: Binlogging on server not active
解決方案:
sudo vi /etc/my.cnf
在[mysqld]標籤下添加:
log-bin=mysql-bin
server-id=1
shell> mysqldump -uroot -p123456 -S /mydata/data/mysql.sock --default-character-set=latin1 --databases backuptest >/tmp/backuptest.bak
shell> grep -i 'insert' /tmp/backuptest.bak
INSERT INTO `student` VALUES (1,'malongshuai','male','2017-03-31'),(2,'gaoxiaofang','female','2015-03-31'),(3,'longshuai','male','2012-03-31'),(4,'meishaonv','female','2014-03-31'),(5,'tun\'er','female','2013-03-31'),(6,'馬','male','2017-03-31');
測試完成以後,將新插入的含有中文字符的記錄刪除。
delete from backuptest.student where studentid=6;
mysqldump + 二進制日誌備份
mysqldump能夠實現全備份,在mysqldump以後再二進制日誌備份就至關於增量備份,這樣就能夠實現全備份以後的定時點還原。
假設要備份的是一張innodb表。使用下面的語句:
mysqldump -uroot -p123456 -S /mydata/data/mysql.sock -q --no-autocommit --flush-logs --single-transaction --master-data=2 --tables backuptest student >/tmp/innodb.sql;
由於dump前會flush二進制日誌,因此以後對該表的操做會記錄到新的滾動日誌中。而後只需備份新的二進制日誌便可。
而後在該表中插入一行記錄。
insert into student select 10,'xiaolonglong','male','2015-01-02';
備份新的二進制日誌。
mysqlbinlog mysql-bin.000002 >/tmp/new_binlog.sql
設計剛纔備份的表誤操做,如刪除該表。
drop table student;
使用該表的徹底備份和二進制日誌恢復。由於備份時使用的是--tables選項,因此要恢復須要進入數據庫指定數據庫,而後使用source來加載sql文件。
use backuptest;source /tmp/innodb.sql;source /tmp/new_binlog.sql;