mariadb server1 : 192.168.1.4
mariadb server2 : 192.168.1.3
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
数据出来了,由此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简化版工具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
进入数据库,进行查询操作,会发现第二次增量备份的数据也都出来了