目录
? ? ? ?备份的主要目的是灾难恢复,在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果。
? ? ? 直接对数据库的物理文件(数据文件、日志文件等)进行备份
? ? ?对数据库的库和表对象以SQL语言的形式导出进行备份
? ? ? 每次备份都备份完整的库或者表数据
? ? ? 只备份上一次完全备份后的更新数据
? ? ? 每次备份只备份上一次完全备份或增量备份后的更新数据
systemctl stop mysqld
#关闭数据库
? ? 使用tar命令打包备份数据库的数据目录和文件?
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
#用tar命令打包备份数据库的数据目录和文件?
mysqldump -uXXX -pXXX --databases 库1 [库2 ....] > XXX.sql
#备份一个或多个库及库中所有的表数据
mysqldump -uXXX -pXXX --all-databases > XXX.sql
#备份所有库
mysqldump -uXXX -pXXX 库名 > XXX.sql
#备份指定库中的所有的表数据,不包含库对象
mysqldump -uXXX -pXXX 库名 表1 [表2 ....] > XXX.sql
#备份指定库中的一个或多个表数据,不包含库对象
? ? ? ?二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED/STATEMENT/ROW
#指定二进制日志(binlog)的记录格式为 MIXED,STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
server-id = 1
#开启二进制日志功能
systemctl start mysqld
#开启数据库
ls -l /usr/local/mysql/data/mysql-bin.*
#长格式查看文件内容
mysqladmin -uXXX -pXXX flush-logs
mysqlbinlog --no-defaults --base64-output=decode-rows -v <BINLOG>
mysql -uXXX -pXXX
如果sql文件是只备份了表数据的文件,需要先创建库并 use 切换库后再执行
source XXX.sql
mysql -uXXX -pXXX < XXX.sql
cat XXX.sql | mysql -uXXX -pXXX
#恢复库
mysql -uXXX -pXXX 库名 < XXX.sql
cat XXX.sql | mysql -uXXX -pXXX 库名
#恢复表
? ? ? ?使用二进制日志增量恢复
mysqlbinlog --no-defaults <BINLOG> | mysql -uXXX -pXXX
#使用二进制日志增量恢复
? ? 如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前。
? ??如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start。
mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点' <BINLOG> | mysql -uXXX -pXXX
#基于位置点恢复
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-position='YYYY-mm-dd HH:MM:SS' <BINLOG> | mysql -uXXX -pXXX
#基于时间点恢复