1、搭建说明
准备工作:主从库已安装mysql软件以及xtracbackup备份工具。具体操作可参见mysql rpm安装文档。
介质 | 版本 |
操作系统 | Red Hat Enterprise Linux Server release 6.8 (Santiago) |
数据库 | MySQL-5.6.30 |
角色 | IP |
主库 | 172.16.81.90 |
从库 | 172.16.81.76 |
2、主库操作
2.1 创建复制用户
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.76' IDENTIFIED BY 'r1234';
mysql> flush privileges;
2.2 开启binlog(若已开启则不需要操作)
# vi /usr/my.cnf
#增加以下内容
[mysqld]
log-bin=mysqlbin
expire_logs_days=7
重启数据库
# service mysql restart
2.3主库备份
创建备份目录
# mkdir /data/backup/
全库备份
# innobackupex --defaults-file=/etc/my.cnf --user=root --password="ni" --socket=/var/lib/mysql/mysql.sock /data/backup/ --no-timestamp
单库备份
# innobackupex --user=root --password="ni" --socket=/var/lib/mysql/mysql.sock --defaults-file=/usr/my.cnf /data/backup/ --no-timestamp --database=wjf
打包备份,传到从库(临时存放在/tmp目录下)
# cd /data/
# tar -cvzf backup_master.tar.gz backup/
# scp backup_master.tar.gz root@172.16.81.76:/tmp/
2.4 参数配置
# vi /usr/my.cnf
#增加如下内容
[mysqld]
server-id=129
relay-log=mymaster-relay-bin
# binlog-do-db=wjf
# binlog-ignore-db=test
replicate_do_db=wjf
#replicate-ignore-db=test
log-slave-updates=1
replicate-same-server-id=0
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_purge=1
relay_log_recovery=1
server-id 是必须的,而且需唯一。
对于mysql 5.6,更新5张系统表的默认存储引擎为innodb。(changer master时报错才操作)
mysql> ues mysql;
mysql> show tables;
删除表
drop table if exists innodb_index_stats;
drop table if exists innodb_table_stats;
drop table if exists slave_master_info;
drop table if exists slave_relay_log_info;
drop table if exists slave_worker_info;
进入datadir,删除对应文件
cd /var/lib/mysql/mysql
rm innodb_index_stats.ibd
rm innodb_table_stats.ibd
rm slave_master_info.ibd
rm slave_relay_log_info.ibd
rm slave_worker_info.ibd
重建以上表
mysql> use mysql;
mysql> source /usr/share/mysql/mysql_system_tables.sql
mysql> show tables;
确认表是否新建成功。
查看配置
mysql> show master status \G;
3、从库操作
3.1 备份恢复
# mkdir /data/
# mv /tmp/backup_master.tar.gz /data/
# tar -xvzf backup_master.tar.gz
# cd /data/backup/
恢复备份文件至可用状态
# innobackupex --apply-log --user=root --password=ni --port=3606 /data/backup/
停止mysql服务
# service mysql stop
重命名原datadir目录
# mv /data/mysql /data/mysql_bak
恢复数据到datadir
# innobackupex --copy-back --user=root --password=ni /data/backup/
170610 18:25:11 completed OK!
修改恢复后datadir目录权限
# chown -R mysql:mysql /data/mysql/
3.2 参数配置
# vi /etc/my.cnf
#添加如下配置
#add for slave
server-id=230
log-slave-updates=1
replicate-same-server-id=0
log-bin=myslavebin
expire-logs-days=7
relay-log=myslave-relay-bin
replicate_do_db=wjf
#replicate-ignore-db=test
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_purge=1
relay_log_recovery=1
read-only=1
对于mysql 5.6,更新5张系统表的默认存储引擎为innodb。(若表当前引擎为innodb,可以不操作)
mysql> ues mysql;
mysql> show tables;
删除表
drop table if exists innodb_index_stats;
drop table if exists innodb_table_stats;
drop table if exists slave_master_info;
drop table if exists slave_relay_log_info;
drop table if exists slave_worker_info;
进入datadir,删除对应文件
cd /var/lib/mysql/mysql
rm innodb_index_stats.ibd
rm innodb_table_stats.ibd
rm slave_master_info.ibd
rm slave_relay_log_info.ibd
rm slave_worker_info.ibd
重建以上表
mysql> use mysql;
mysql> source /usr/share/mysql/mysql_system_tables.sql
mysql> show tables;
确认表是否新建成功。
重启服务器
<span style="color:#aa5500"># service mysql restart</span>
配置change master to
提取MASTER_LOG_FILE、MASTER_LOG_POS参数。
# cd /data/backup/
# more xtrabackup_binlog_info
mysqlbin.000004 211678
配置
mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.90',
MASTER_USER='repl',
MASTER_PASSWORD='r1234',
MASTER_LOG_FILE='mysqlbin.000004',
MASTER_LOG_POS=211678;
3.3 启停从库
启动从库
mysql> start slave;
停止从库
mysql> stop slave;
从库状态确认
mysql> show slave status \G;
(额外部分)
从库的IO_thread、sql_thread可以单独启停。命令如下:
mysql> start slave io_thread;
mysql> start slave sql_thread;
4、主从切换
4.1 切换前状态检查
#----主库操作
锁定所有表为只读模式。
mysql> flush tables with read lock;
状态查看
mysql> show processlist;
传输线程显示Master has sent all binlog to slave; waiting for binlog to be updated
#----从库操作
mysql> show processlist;
显示Slave has read all relay log; waiting for the slave I/O thread to update it
4.2 切换
原从库(81.76)操作
#-----原从库(81.76)操作
mysql> stop slave;
mysql> reset master;
mysql> reset slave all;
#-----切换后检查
mysql> show master status\G;
#-----创建复制用户
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO repl@'172.16.81.90' IDENTIFIED BY 'replpwd';
mysql> flush privileges;
#-----注释掉read_only参数
# vi /etc/my.cnf
#read-only=1
#-------重启数据库
# service mysql restart
记录一下两个位置参数,用于主库变从库时的change master to设置。
原主库(81.90)操作
#-------原主库(81.90)操作
mysql> CHANGE MASTER TO MASTER_HOST='172.16.81.76',
MASTER_USER='repl',
MASTER_PASSWORD='replpwd',
MASTER_LOG_FILE='mysqlbin.000001',
MASTER_LOG_POS=638;
#------启动从库
mysql> start slave;
#------查看从库状态
mysql> show slave status;
#------解锁表
mysql> unlock tables;
若需要设置从库只读,还需要修改/usr/my.cnf文件
添加参数后重启。
read-only=1