什么是双主复制在传统的主从复制架构中,从库仅仅是作为主库数据的备份,当主库发生故障时,数据库将停止对外提供服务,并且主库故障后手动进行主从切换的过程也较为繁琐 。为了解决这个问题,可以采用 MySQL 双主模式,其中一台主库提供服务,另一台作为热备 。结合 keepalived 使用虚拟 IP 对外提供服务,一旦主库发生故障,备库可以在很短的时间内接管服务 。

文章插图
机器规划搭建 MySQL 双主同步准备工作创建相关目录
#创建用户userdel -r mysqlgroupadd 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/binlogmkdir -p /mysql/log/3308/relaylogmkdir -p /mysql/backup/3308/xtrabackup/target_dirmkdir -p /mysql/backup/3308/mysqldumpmkdir -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/appmv /mysql/app/mysql-5.7.29-linux-glibc2.12-x86_64 /mysql/app/mysqlchown -R mysql:mysql /mysql复制代码配置环境变量
##将MySQL目录添加环境变量##cat >> ~/.bash_profile <<-EOFexport PATH=$PATH:/mysql/app/mysql/binEOFsource ~/.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=1cat > /mysql/data/$MySql_Port/my.cnf <<-EOF#------------------------------------ #客户端设置#------------------------------------[client]port=$MySql_Portsocket =/mysql/data/$MySql_Port/mysql.sockdefault-character-set=utf8 #------------------------------------ #mysql连接工具设置#------------------------------------
推荐阅读
- 被记大过了,一个操作把MySQL主从复制整崩了……
- 大厂高频:讲一下MySQL主从复制
- MySQL面试常见问题解析:掌握这10个问题,事半功倍!
- MySQL如何支撑每秒百万QPS?
- 从MySQL到OBOracle:如何处理自增列?
- MySQL分库分表全攻略:从小白到大神的进阶指南!
- 一次MySQL主从同步异常,扒个底朝天都没排查出来……
- MySQL关联查询时,为什么建议小表驱动大表?这样做有什么好处
- MySQL 驱动中虚引用 GC 耗时优化与源码分析
- Mysql的存储引擎有哪些?
