数据库备份(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  [email protected]:/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工具做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

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

  




你可能感兴趣的:(数据库备份(mysql,mariadb)_mysqldump,Xtrabackup篇)