参考连接:
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;