MariaDB-10.1.30 简单主备搭建

环境相关:
OS:CentOS release 6.9
主MySQL IP:192.168.1.10
备MySQL IP:192.168.1.11
CPU:4核
MEM:2G
DISK:50G

1. 简单说明

公司某小项目做等保之类的检查,要求MySQL库至少要有主备同步的灾备防护,
因此对生产上使用的MariaDB-10.1.X进行简单主备改造。
这里需要注意,MariaDB和Oracle版的MySQL搭建有很多区别,
本文档不能直接用于Oracle版的MySQL。

2. 环境准备

参照《编译安装MariaDB-10.1.30》,编译一台MariaDB作为主MySQL主机,
使用虚拟机克隆,克隆出备MySQL主机,修改备机的IP和主机名,其他保持不变。

3. 搭建部署

主备库的server_id是不可以相同的,因此需要修改备库的配置文件:

# 备库主机操作
SERVERID=$RANDOM
# 调用bash变量RANDOM,随机生成一个0~32767之间的整数
sed -i "s/server_id=.*/server_id=$SERVERID/g" /etc/my.cnf
# 修改备库的server_id

主备库的配置文件还需要在 #####replication######标签下添加配置:

# 主备库主机均操作
sed -i "/^#*replication#*$/a\report-host=$(hostname)" /etc/my.cnf
sed -i "/^#*replication#*$/a\binlog-rows-query-log_events=1" /etc/my.cnf
sed -i "/^#*replication#*$/a\slave-sql-verify-checksum=1" /etc/my.cnf
sed -i "/^#*replication#*$/a\master-verify-checksum=1" /etc/my.cnf
sed -i "/^#*replication#*$/a\binlog-checksum=CRC32" /etc/my.cnf
sed -i "/^#*replication#*$/a\slave-parallel-threads=2" /etc/my.cnf
sed -i "/^#*replication#*$/a\sync-master-info=1" /etc/my.cnf
sed -i "/^#*replication#*$/a\relay-log-info-repository=TABLE" /etc/my.cnf
sed -i "/^#*replication#*$/a\master-info-repository=TABLE" /etc/my.cnf
# 即在主备库的配置文件中的replication标签下添加如下参数
# master-info-repository=TABLE
# relay-log-info-repository=TABLE
# sync-master-info=1
# slave-parallel-threads=2
# binlog-checksum=CRC32
# master-verify-checksum=1
# slave-sql-verify-checksum=1
# binlog-rows-query-log_events=1
# report-host=ecpssdb
# 最后一行是各自的主机名

主库添加用于实现同步操作的数据库用户,
备库需要使用该账号登录主库:

# 主库操作
mysql -uroot -pvincent
GRANT REPLICATION SLAVE,REPLICATION CLIENT 
ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY 'replpass';
flush privileges;
exit
# 备库处于192.168.1.0 网段,因此该账号授权备库所在网段的登录权限
# 也可以限制只能备库的IP使用该账号登录

模拟生产,主库创建业务库,插入数据,模拟生产,
可以写一个脚本做实时的插入操作,更为真实的模拟生产:

# 主库操作
mysql -uroot -pvincent
create vincent;
create table vincent.test(
 id         bigint(20) NOT NULL,
 changetime timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL);
exit;
mysql -uroot -pvincent
create vincent;
create table vincent.test(
 id         bigint(20) NOT NULL,
 changetime timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL);
exit;

while true
do
  echo 'insert into vincent.test(id) select count(*) from vincent.test;'| mysql -uroot -pvincent
  sleep 1
done

主库操作,备份全库,并且查询出备份开始时的binlog日志和对应的POS号
将备份复制到备库

# 主库操作
mysqldump -uroot -pvincent \
--single-transaction \
--master-data=2 -A >/tmp/fulldb.sql

head -30 /tmp/fulldb.sql|grep '^-- CHANGE MASTER TO MASTER_LOG_FILE'
# -- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000257', MASTER_LOG_POS=92212605;

scp /tmp/fulldb.sql  192.168.1.11:/tmp/

备库使用备份恢复,根据主库的binlog进行数据同步

mysql -uroot -pvincent </tmp/fulldb.sql
mysql -uroot -pvincent
CHANGE MASTER TO MASTER_HOST='192.168.1.10',
MASTER_USER='repluser',MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='binlog.000257',MASTER_LOG_POS=92212605;
-- 指定主库IP和用户数据同步的主库的账号以及主库对应的binlog相关信息

START SLAVE;
show slave status\G
show variables like '%gtid%';
-- 启动同步
-- 查看备库状态,是否有报错
-- 查看gtid,是否在实时跳变

STOP SLAVE;
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
START SLAVE;
show slave status\G
show variables like '%gtid%'
-- 一般使用slave_pos方式进行同步
-- 停掉同步,修改参数,再次启动,验证

4. 收尾

本文档只是一个简单的主备搭建过程,生产实施时需要在业务低峰时,
后续的主备状态监控,以及告警和主备故障切换,备库同步失败后的恢复等等,
需要自行再去研究…

[TOC]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值