MySQL数据库的备份与恢复操作,配置实时增量备份。
一、数据的完全备份和恢复
物理备份:
使用cp、tar命令拷贝数据库目录下的数据。
备份:cp -rp /var/lib/mysql/数据库/ 备份目录/数据库/
恢复:cp -rp 备份目录/数据库/ /var/lib/mysql/数据库/
全部数据拷贝过后由于授权库也发生变更,所以其登陆密码也被修改。
用一台服务器拷贝另一台服务器的数据库,具体操作如下:
systemctl stop mysqld scp -rp 远程数据库服务器IP:/var/lib/mysql/ /var/lib/mysql/ chown mysql:mysql /var/lib/mysql/ -R systemctl restart mysqld
完全备份:
备份所有数据
mysqldump -u用户 -p密码 数据库名 > 备份路径/备份文件.sql
其原理为:将现有数据库重新反向编译成建库、建表、添加记录的命令!
数据库名字表示方式:
--all-databases 或 -A 所有库
数据库名 单个库
数据库名.数据表名 单个表
-B 数据库1 数据库2 多个库
注意:无论是备份还是恢复,都需要足够的用户操作权限!
注意:备份后的文件,多个库以上的会含有建库的指令,单个库将会直接从建表开始。
恢复数据库:
mysql -u用户 -p密码 数据库名 < 路径/备份文件.sql
恢复多个数据库不需要填写数据库名称!
实时增量备份:
通过启用binlog日志,实现实时备份,其原理为此日志文件将会记录下在数据库当中除查询之外的输入指令。
修改配置文件,启用binlog日志:
vim /etc/my.cnf
在[mysqld]下添加如下两行。
server_id=50 //范围:1-255之间的整数 log-bin=存储路径/自定义名称 binlog_format="mixed" //指定日志记录格式,将会记录mysql命令,默认ROW格式。
保存退出输入以下指令:
mkdir /var/log/mysql chown mysql:mysql /var/log/mysql systemctl restart mysqld
binlog日志启动完成,实际上增量备份已经配置完成;同时重启服务会发现/var/log/mysql路径下出现了日志文件(.000001)和日志文件索引(.index)。
参照以上的启动,那么我们可用参照如下两条命令编写定时备份脚本:
mysqldump -uroot -p123456 --flush-logs 数据库名 > 路径/备份文件.sql //备份数据库并且,刷新日志 mysql -uroot -p123456 -e'reset master' //删除所有日志文件,并且重新编号。
使用binlog日志文件恢复数据库:
注意:使用以下命令恢复日志,若最后执行了删除数据,则仍会恢复最后一条的删除命令,需要预先查看日志,获取偏移量。(# at 值)
mysqlbinlog --stop-position=偏移量 /var/log/mysql/teddyou.000001 | mysql -uroot -p123456
拓展命令:
mysqlbinlog /var/log/mysql/teddyou.000001 //查看日志 mysql -uroot -p123456 -e'flush logs' //刷新日志,生成一个新的日志文件。
其他的数据库备份方式:
增量备份:
备份上次备份后,所有新产生的数据(增量备份只会备份上次增量备份过后的新增数据)
差异备份:
备份完全备份后,所有新产生的数据(差异备份只会备份上次执行完全备份后与当前备份数据产生差异的数据)
发表评论