云服务器

xstrabackup实现数据库主从

2017-12-28 09:17:37 0

工作中备份主要是下面几种:

  1. 冷备:需要停止当前正在运行mysqld,然后直接拷贝或打包数据文件
  2. 半热备:mysqldump+binlog --适合数据量比较小的应用
  3. 在线热备:AB复制 --实时备份
这三种备份方法都在数据量比较小时候可以适用,但数据量大时,因为要停掉数据库或者是锁表都大大的影响了生产,因此给大家推荐一个xtrabackup用来实现mysql主从复制。

xstrabackup

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品

准备环境

  1. 5 64bit
  2. mysql 5.5
  3. xtrabackup-2.2

部署环境

只需要在mysql的主库上面安装

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.12/binary/redhat/6/x86_64/percona-xtrabackup-2.2.12-1.el6.x86_64.rpm

rpm -ivh percona-xtrabackup-2.2.12-1.el6.x86_64.rpm

主从配置检查

  • 检查server-id配置
  1. 主和从的server-id一定不能一样 不然一定会报错
show global variables like 'server_id'; ###查看server id

也可以通过配置文件my.cnf查看

  • 检查binlog日志是否开启
show global variables like 'log_bin';

设置mysql密码

mysqladmin -u root password "111222"

master上做全库备份

  • 备份
这里注意路径,不同方法安装,数据库的路径不同

innobackupex --defaults-file=/usr/local/services/mysql/my.cnf --user=root --password=111222 /tmp

  • 保持事务一致性
为了保证备份集中的数据一致,需要操作

innobackupex --defaults-file=/usr/local/services/mysql/my.cnf --user=root --password=111222 --apply-log /tmp/2017-09-25_07-46-14

  • 拷贝文件到slave
scp -r /tmp/2017-09-25_07-46-14 192.168.0.171:/tmp

master上创建同步账号并授权REPLICATION

  • 创建用户并授权
CREATE USER 'slave'@'192.168.0.%' IDENTIFIED BY 'slave';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'192.168.0.%';

flush privileges;

  • 在从库测试是否可以使用slave账号登录
mysql -h192.168.0.171 -uslave -p'slave'

从库配置

  • 停掉从库
/etc/init.d/mysqld stop
  • 复制从master上面拷贝的文件放到slave的datadir目录下
mv /tmp/2017-09-25_07-46-14/* /data/mysql/data
  • msyqldir的data目录授权
chown -R mysql:mysql /data/mysql/data

启动从库 并执行change master设置主服务器复制信息

  • 启动从库的mysql /etc/init.d/mysqld start
  • 查看bin_log日志的编号
cd /tmp/2017-09-25_07-46-14

cat xtrabackup_binlog_info

mysql-bin.000017 107

  • 进入mysql设置change master设置主服务器复制信息
change master to master_host='192.168.0.170', master_user='slave', master_password='slave',master_port=3306,master_log_file='mysql-bin.000017',master_log_pos=107;
  • 在slave上面启动复制
slave start;
  • 检查主从是否正常
mysql>show slave status\G;

看下面这两个可以知道

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

 

上一篇: 无

微信关注

获取更多技术咨询