什么是双主复制在传统的主从复制架构中,从库仅仅是作为主库数据的备份,当主库发生故障时,数据库将停止对外提供服务,并且主库故障后手动进行主从切换的过程也较为繁琐 。为了解决这个问题,可以采用 MySQL 双主模式,其中一台主库提供服务,另一台作为热备 。结合 keepalived 使用虚拟 IP 对外提供服务,一旦主库发生故障,备库可以在很短的时间内接管服务 。
文章插图
机器规划搭建 MySQL 双主同步准备工作创建相关目录
#创建用户
userdel -r mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
#创建目录
# /mysql/App/MySQL 数据库软件根目录
# /mysql/data/3306/data/MySQL 数据文件目录
# /mysql/log/3306/binlogMySQL 二进制日志目录
# /mysql/log/3306/relaylogMySQL 中继日志目录
# /mysql/backup/3306/xtrabackup/target_dirMySQL xtrabackup 物理备份目录
# /mysql/backup/3306/mysqldumpMySQL mysqldump 逻辑备份目录
# /mysql/scriptMySQL 常用脚本存放目录
mkdir -p /mysql/app/
mkdir -p /mysql/data/3308/data/
mkdir -p /mysql/log/3308/binlog
mkdir -p /mysql/log/3308/relaylog
mkdir -p /mysql/backup/3308/xtrabackup/target_dir
mkdir -p /mysql/backup/3308/mysqldump
mkdir -p /mysql/script
#给目录授权
chown -R mysql:mysql /mysql
复制代码下载并解压 MySQL 安装包MySQL 压缩包下载地址:https://dev.mysql.com/downloads/mysql/5.7.html
#解压压缩包
tar zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /mysql/app
mv /mysql/app/mysql-5.7.29-linux-glibc2.12-x86_64 /mysql/app/mysql
chown -R mysql:mysql /mysql
复制代码配置环境变量
##将MySQL目录添加环境变量##
cat >> ~/.bash_profile <<-EOF
export PATH=$PATH:/mysql/app/mysql/bin
EOF
source ~/.bash_profile
复制代码初始化主库 A主库 A 重要配置如下:
- 开启 binlog:
log_bin=binlog 目录
- 设置 server_id:
server_id = 1
,主库 A 的 server_id 和主库 B 要不一样 。
- 针对 GTIP 的方式同步有两个参数必须设置:
-
gtid_mode=on
-
enforce_gtid_consistency=on
- 防止主键冲突:
- 设置自增主键步长,通常有几个主库 就写几,避免主键冲突:
auto_increment_increment=2
- 设置自增主键起始值,第一个主库为 1,第二个主库为 2,以此类推:
auto_increment_offset=1
关于防止主键冲突的两个参数的详解可以查看 这篇博客 。
#主机名和端口号作为目录名的一部分
HostName=`hostname`
MySql_Port=3308
#IP地址
Ip=192.168.1.36
#master server_id 要和 slave 不一样
Server_Id=1
cat > /mysql/data/$MySql_Port/my.cnf <<-EOF
#------------------------------------
#客户端设置
#------------------------------------
[client]
port=$MySql_Port
socket =/mysql/data/$MySql_Port/mysql.sock
default-character-set=utf8
#------------------------------------
#mysql连接工具设置
#------------------------------------
推荐阅读
- 被记大过了,一个操作把MySQL主从复制整崩了……
- 大厂高频:讲一下MySQL主从复制
- MySQL面试常见问题解析:掌握这10个问题,事半功倍!
- MySQL如何支撑每秒百万QPS?
- 从MySQL到OBOracle:如何处理自增列?
- MySQL分库分表全攻略:从小白到大神的进阶指南!
- 一次MySQL主从同步异常,扒个底朝天都没排查出来……
- MySQL关联查询时,为什么建议小表驱动大表?这样做有什么好处
- MySQL 驱动中虚引用 GC 耗时优化与源码分析
- Mysql的存储引擎有哪些?