Mysqldump备份

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

相关文章
相关标签/搜索