MySql双主基于gtid

前提

有一个正在运行的数据库A(已经存在数据),防止断电及网络影响使用,再添加一个数据库B实现双主高可用。

新建数据库B

安装数据库B

# 进入软件目录
cd /usr/local/software/
# 下载文件
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
# 解压
tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
# 创建用户组 查看用户组  groups
groupadd mysql
# 创建用户hy-mysql,添加到用户组mysql中
useradd -r -g mysql -s /bin/false hy-mysql
# 设置启动软连接
cd /usr/local
ln -s /usr/local/software/mysql-5.7.33-linux-glibc2.12-x86_64 mysql
# 创建数据文件夹
cd mysql
mkdir data
# 修改文件夹权限  用户:用户组
chown hy-mysql:mysql data
chmod 750 data
# 初始化
bin/mysqld --initialize --user=hy-mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 初始化完成后会打印临时密码
A temporary password is generated for root@localhost: yfe=F6*3j2GJ

使用systemctl管理mysql

创建文件/etc/systemd/system/mysqld.service并配置

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

设置环境变量

# 编辑文件
vim /etc/profile
# 添加内容:
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
# 保存,更新配置:
source /etc/profile

数据库必须添加配置

数据库A使用配置

[mysqld]
# 记录服务器id,主从中server—id必须不同
server-id = 2
# 二进制日志(主从复制必需)
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
binlog_row_image = FULL
log_slave_updates = ON
# 主键自增步长,双主选择增加了2,防止主键冲突
auto_increment_increment = 2
auto_increment_offset = 2
# 每次事务提交后立即同步
sync_binlog = 1
# 开启gtid
gtid_mode = ON
enforce_gtid_consistency = ON

数据库B使用配置

[mysqld]
# 记录服务器id,主从中server—id必须不同
server-id = 1
# 二进制日志(主从复制必需)
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
binlog_row_image = FULL
log_slave_updates = ON
# 主键自增步长,双主选择增加了2,防止主键冲突
auto_increment_increment = 2
# 设置为1表示从1开始自增
auto_increment_offset = 1
# 每次事务提交后立即同步
sync_binlog = 1
# 开启gtid
gtid_mode = ON
enforce_gtid_consistency = ON
两个配置不同处

server-id,记录设备id
auto_increment_offset 设置起始值,A从2每次增加2,b从1开始每次增加2,连个数据库不会出现主键在冲突

备份运行数据库并导入新建数据库

数据库A备份

# 有时候导出文件首行会出现无效记录可以删除​
mysqldump -u root -p123456 --databases task_manager user_manager  --single-transaction --set-gtid-purged=ON > init.sql​

数据库B导入备份数据

mysql -u root -p  < init.sql

创建复制用户,登录数据库执行

A数据库创建用户,b数据库用于复制

CREATE USER 'yun_b'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'yun_b'@'%';
FLUSH PRIVILEGES;

B数据库创建用户,a数据库用于复制

# b数据库使用临时密码登录后需要先修改密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'passwor';
# 创建用于复制的用户
CREATE USER 'docker_config'@'%' IDENTIFIED BY 'docker419$';
GRANT REPLICATION SLAVE ON *.* TO 'docker_config'@'%';
FLUSH PRIVILEGES;

连接数据库,登录数据库后在A和B分别执行连接对方数据库

-- 设置主服务器
CHANGE MASTER TO
-- 设置主服务器ip
MASTER_HOST = '0.0.0.0',
-- 设置主服务器端口,不写默认3306
MASTER_PORT = 33070,
-- 设置主服务器连接用户名
MASTER_USER = 'username',
-- 设置主服务器连接密码
MASTER_PASSWORD = 'password$',
-- 启用 GTID 自动定位
MASTER_AUTO_POSITION = 1;  
-- 启动 复制服务
START SLAVE;
-- 查看状态
SHOW SLAVE STATUS\G;

复制自动忽略mysql数据库在 SHOW SLAVE STATUS\G;中可以看到
在这里插入图片描述
至此双向复制建立完成

此文技术,助力微信小程序:马上行计划管理。
欢迎体验,微信搜索马上行计划管理,或者扫码
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值