首页 > Database > 数据库备份(mysql,mariadb)_mysqldump,Xtrabackup篇
2016
04-03

数据库备份(mysql,mariadb)_mysqldump,Xtrabackup篇

mariadb server1  : 192.168.1.4

mariadb server2  : 192.168.1.3

  • mysqldump客户端工具进行逻辑备份,恢复

1.对mariadb server1  备份并修改:

使用mysqldump客户端工具进行逻辑备份,适用所有引擎,是一个客户端命令工具,用msyql协议连接至msyqld服务器端,将数据导出,保存至磁盘中。对MyISAM引擎支持温备,对InnoDB引擎支持热备。

systemctl start mariadb

mysqldump -uroot -p***** –all-databases –master-data=2 > all.sql   ///这里的****是root账号的密码,–master-data=2表示对二进制的change-log施加注释,为1表示不注释,这里是为了以后再进行二进制日志备份时,可以less all.sql,从– CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=503;处找出–start-position=503,bin-log是mysql-bin.000003

连接至mariadb server,修改数据,

MariaDB [hellodb]> USE hellodb.sql;

MariaDB [hellodb]> INSERT students VALUES(28,’Ling Mei’,22,’F’,5,”);

///前面的完整备份就只能回复修改之前的数据了,接下来需要靠二进制日志恢复数据了

~]#  mysqlbinlog –start-position=503  /var/lib/mysql/mysql-bin-00003  >  binlog.sql

将all.sql,binlog都传到mariadb.server2

scp all.sql binlog.sql  root@192.168.1.3:/root

2.mariadb server2导入数据进行恢复

mysql < all.sql;

此时登入mariadb,

MariaDB [hellodb]> SELECT * FROM students;

发现没有叫Ling Mei的选项,因此需要借助二进制日志进行恢复

mysql<binlog.sql

数据出来了,由此mysqldump的备份及恢复完毕

2.使用lvm2备份:

vim  /etc/my.cnf   ,将datadir修改为datadir=/mydata/data

创建lvm,挂载至datadir的/mydata/data

连入数据库,锁定所有表

FLUSH TABLES WITH READ;

FLUSH LOGS;     //滚动二进制日志

mysql  -uroot -p*** -e ‘SHOW MASTER STATUS;’ > /tmp/binlog.`date +%F`

开始对上面的lvm创建快照,实现备份

lvcreate -L 1G -p r  -n   mysql_snap -s   /dev/mapper/mydata

创建完,登入数据库解锁

UNLOCK TABLES;

如果数据库挂了,于是将快照mysql_snap挂载至其他地方,进行备份

  • 基于xtrabackup工具做mariadb数据备份
 

运用xtrabackup简化版工具innobackupex,它是由C语言开发的,是通过mysql协议连接至mysql服务器端进行备份的,因此只能online备份的,即热备。。。先全备,再增量备份;恢复时,先将增量备份和全量备份的数据整合到一起,最后统一恢复。恢复时会先读取[mysqld]服务器端的相关参数去连接mysql server,再读取[xtrabackup】自身相关的配置文件

host1:192.168.1.3   node3.huahualin.com

host2:192.168.1.4  node4.huahualin.com

host1:备份:

mkdir /backups
chown mysql. /backups/
innobackupex /backups/     ///全备
innobackupex /backups/ –incremental  –incremental-basedir=/backups/2016-03-22_23-18-15/    ///在数据库中进行一些SQL语句操作后,MASTER LOGS会有所变化,可以进行增量备份了,–incremental-basedir指定基于哪个全备或增量备份的目录进行备份
scp /backups/* node4.huahualin.com:/data/mysql   ///通常备份是异地的,当数据库故障时,将异地的备份数据考到新的数据服务器上进行还原后,将新的数据库服务器上线
scp /backups/* node4.huahualin.com:/data/mysql -r
scp -r  /backups/* node4.huahualin.com:/data/mysql

host2:恢复:

innobackupex –apply-log –redo-only /data/mysql/2016-03-22_23-18-15/     ///对全备进行整合

cat /data/mysql/2016-03-22_23-18-15/xtrabackup_checkpoints    ///可以查看binlog的pos位置
innobackupex –apply-log –redo-only /data/mysql/2016-03-22_23-18-15/ –incremental-dir=/data/mysql/2016-03-22_23-22-53/     ///将增量备份的数据整合到全备目录下

cat /data/mysql/2016-03-22_23-18-15/xtrabackup_checkpoints    ///再次查看同一个目录,发现已经更改为新的pos了

chown mysql. /data/mysql/ -R

systemctl stop mariadb.service    ///关掉数据库,开始准备恢复

rm -rf /var/lib/mysql/*

innobackupex –copy-back /data/mysql/2016-03-22_23-18-15/    ///数据恢复

chown mysql. /var/lib/mysql/ -R     ///这里的权限不改,会起不来服务的,因为恢复后是root权限。。。应该改为mysql.mysql
systemctl start mariadb

进入数据库,进行查询操作,会发现第二次增量备份的数据也都出来了

 

来自好友分享

最后编辑:
作者:李国庆
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。