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;中可以看到
在这里插入图片描述
至此双向复制建立完成

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

要基于 GTID(Global Transaction Identifier)搭建数据库,你需要遵循以下步骤: 1. 确保你的MySQL版本支持GTIDGTIDMySQL 5.6及更高版本中可用。如果你的版本低于5.6,需要升级到支持GTID的版本。 2. 在两个MySQL服务器上启用GTID。在每个服务器的配置文件中,添加以下参数并重启MySQL服务: ``` server-id = <unique_server_id> log-bin log-slave-updates enforce-gtid-consistency = 1 ``` 这些参数将启用GTID并配置二进制日志和从服务器更新。 3. 创建复制用户并授权。在每个服务器上,创建用于复制的用户,并授予复制权限。例如: ``` CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%'; ``` 4. 在服务器上执行备份并导入到从服务器。使用`mysqldump`命令在服务器上执行备份,然后将备份文件导入到从服务器。确保在导入时使用`--set-gtid-purged=OFF`参数,以避免清除GTID信息。 5. 配置从复制。在从服务器上执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_AUTO_POSITION=1; ``` 这将配置从服务器连接到服务器并启动复制。 6. 启动复制。在从服务器上执行以下命令: ``` START SLAVE; ``` 这将启动从服务器与服务器之间的复制。 7. 验证复制。通过检查从服务器的状态,确保复制正常工作: ``` SHOW SLAVE STATUS\G ``` 检查`Slave_IO_Running`和`Slave_SQL_Running`字段,确保两者都显示为`Yes`。 完成上述步骤后,你将具有基于GTID数据库架构。这将允许你在两个服务器上同时进行写操作,并确保数据一致性和高可用性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值