养成对数据经常做备份是平时运维中一种良好的习惯,良好的数据备份习惯或许可以成为你生产工作中紧急情况的救命稻草。记录下工作中收集整理的数据库备份与还原的操作,这里介绍两种针对mysql数据库的备份还原方法。
mysqldump
mysqldump是mysql数据库官方自带对数据库进行备份还原的工具。
优点
数据库自带不用单独找其他工具,另外因为是数据库自带工具,对数据库本身兼容性更好,特别在跨数据库版本迁移备份还原的时候推荐使用官方的mysqldump数据备份个工具。
缺点
说了优点也说下缺点,mysqldump在进行数据备份还原的时候会进行锁表操作,操作结束后又对表进行解锁。如果需要备份的数据库数据比较小还好,数据量比较大锁表时间太长对数据库的生产访问使用也存在影响。
mysqldump备份
[root@10 bin]# ./mysqldump -ugray -p -P 3308 --databases csm > /home/gray/dbbak/csm_20180118.sql
-u表示数据库用户名
-p表示数据库密码
-P表示数据库访问端口
–databases表示数据库,后面跟参数csm表示备份名叫csm的数据库
>表示输出备份数据到备份路径/home/gray/dbbak/csm_20180118.sql
mysqldump还原
[root@10 bin]# ./mysql -ugray -p -P 3308 csm < /home/gray/dbbak/csm_20180118.sql
<表示还原备份路径/home/gray/dbbak/csm_20180118.sql的数据到csm数据库
还原数据也可以使用source方法
use csm;
source /home/gray/dbbak/csm_20180118.sql;
Percona XtraBackup
Percona是一家位于北卡罗来纳州达勒姆的美国公司,并且为MySQL,MariaDB,PostgreSQL,MongoDB和RocksDB用户开发了许多开源软件项目。percona xtrabackup的数据库备份还原工具解决mysqldump生产环境使用中备份数据锁表的问题,可以提供生产使用过程中不停机进行备份数据,数据备份类别多,可选数据增量备份,数据全量备份。
全量备份
/home/gray/percona/bin/innobackupex --defaults-file=/etc/my.cnf --user=gray --password=hello123 --port=3308 --use-memory=4G --host=localhost /data/backup/full/
–defaults-file表示数据库配置文件所在位置
–user表示数据库用户名
–password表示数据库密码
–port表示数据库端口
–use-memory表示程序运行时可以占用的系统最大内存
–host表示操作数据库的主机地址
/data/backup/full/表示数据备份的路径
增量备份
/home/gray/percona/bin/innobackupex --defaults-file=/etc/my.cnf --user=gray --password=hello123 --port=3308 --use-memory=4G --host=localhost --incremental /data/backup/incre/ --incremental-basedir /data/backup/full/2018-01-24_18-17-16/
增量备份前面的参数跟全量备份一样,差异在最后的增量备份位置,跟基于哪一个全量备份做差异比较的增量备份,要做增量备份,必须先做一次全量备份。
–incremental表示增量备份位置
–incremental-basedir表示基于哪一个全量备份进行差异比较做数据增量备份,后面参数是基于此全量路径做增量备份的路径
全量还原
一般情况下,这个备份不能用于恢复,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务,此时数据文件处于不一致的状态。因此,我们现在就是要通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
提交事务
/home/gray/percona/bin/innobackupex --defaults-file=/etc/my.cnf --user=gray --password --apply-log /data/backup/full/2018-01-20_10-52-43
–apply-log进行事务提交
关停数据库
service mysql stop
备份原数据库数据目录
mv /data/mysql/data /data/mysql/data_old
创建新的数据库数据目录
mkdir -p /data/mysql/data
还原数据
/home/gray/percona/bin/innobackupex --defaults-file=/data/mysql/my.cnf --user=gray --password=hello123 --copy-back /data/backup/full/2018-01-20_10-52-43
–copy-back表示还原数据,后面指定需要还原哪一个备份数据的所在路径
目录赋权
chown -R mysql.mysql /data/mysql/data
对新目录执行赋权操作,此操作需在innobackupex恢复命令后
启动服务
service mysqld start
数据库启动完成后,登录查看数据是否恢复成功。
增量还原
进行一次全量还原
/home/gray/percona/bin/innobackupex --defaults--file=/etc/my.cnf --user=gray --password=hello123 --apply-log --redo-only /data/backup/full/2018-01-20_10-52-43
–apply-log –redo-only 只前滚已经提交的事务,并不回滚那些未提交的事务
第一次增量还原
/home/gray/percona/bin/innobackupex --defaults--file=/etc/my.cnf --user=gray --password=hello123 --apply-log --redo-only /data/backup/full/2018-01-20_10-52-43 --incremental-dir=/data/backup/incre/2018-01-21_02-00-00
第二次增量还原
/home/gray/percona/bin/innobackupex --defaults--file=/etc/my.cnf --user=gray --password=hello123 --apply-log --redo-only /data/backup/full/2018-01-20_10-52-43 --incremental-dir=/data/backup/incre/2018-01-22_02-00-00
最后一次数据还原
关停数据库
service mysql stop
备份原数据库数据目录
mv /data/mysql/data /data/mysql/data_old
创建新的数据库数据目录
mkdir -p /data/mysql/data
还原数据
/home/gray/percona/bin/innobackupex --defaults-file=/data/mysql/my.cnf --user=gray --password=hello123 --copy-back /data/backup/full/2018-01-20_10-52-43
目录赋权
chown -R mysql.mysql /data/mysql/data
启动服务
service mysqld start
对于后续可以对数据库进行定时任务备份,备份周期频率,旧备份数据清理都是好的办法。