Linux7安装Mysql8并设置主从同步(基于全局事务标识符(GTID))

 1.准备工作:

# 提前安装相关依赖
yum install libaio perl net-tools -y
# yum install perl -y
# yum -y install net-tools
# 卸载maraidb
rpm -qa|grep mariadb # 若显示就卸载掉
# mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e --nodeps mariadb-libs
rpm -qa | grep mariadb

 2.下载rpm包(8.0.24)

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.24-1.el7.x86_64.rpm-bundle.tar

 3.解压

tar -xvf mysql-8.0.24-1.el7.x86_64.rpm-bundle.tar

4.安装

rpm -ivh mysql-community-common-8.0.24-1.el7.x86_64.rpm 
 
rpm -ivh mysql-community-client-plugins-8.0.24-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-8.0.24-1.el7.x86_64.rpm 
 
rpm -ivh mysql-community-client-8.0.24-1.el7.x86_64.rpm
 
rpm -ivh mysql-community-server-8.0.24-1.el7.x86_64.rpm
 

5.配置mysql忽略表名大小写(8.0后必须在初始化数据库前进行配置)

# 在/etc/my.cnf中增加配置如下
lower_case_table_names  = 1

6.启动(此mysql实例作为主库,ip = 192.168.136.128)

systemctl enable mysqld.service
systemctl start mysqld.service
cat /var/log/mysqld.log | grep 'temporary password'
# ...A temporary password is generated for root@localhost: 随机密码
mysql -uroot -p
# 输入上面查到的密码
-- 密码检查等级,0/LOW、1/MEDIUM、2/STRONG
set global validate_password.policy=0;
-- 密码的最短长度
set global validate_password.length=4;
-- 密码至少要包含的小写字母个数和大写字母个数
set global validate_password.mixed_case_count=0;
-- 设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123.';
-- 设置root账号远程登录权限
USE mysql;
UPDATE mysql.user SET host = '%' WHERE user = 'root';
flush privileges;
-- SELECT host, user FROM user;

7.重复以上步骤,安装从库(ip = 192.168.136.129)

8.开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

重载防火墙

firewall-cmd --reload

查看防火墙状态

firewall-cmd --list-ports

#### 配置主从复制 ####

1.配置主数据库的 my.cnf 配置文件 

vi /etc/my.cnf
###主从数据库配置核心部分
[mysqld]
# 设置同步的binary log二进制日志文件名前缀,默认为binlog
log-bin=mysql-bin
# 服务器唯一id,默认为1,一般设置本机ip地址末尾3位,值范围为1~2^32−1. ;主数据库和从数据库的# #    # server-id不能重复
server-id=128     
     
#开启 GTID
gtid_mode=ON
enforce_gtid_consistency=ON

###可选配置
# 需要主从复制的数据库,如多个则重复配置
# binlog-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步),如多个则重复配置
# binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
binlog_expire_logs_seconds=2592000
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

2.启动主数据库,创建一个同步复制用户(非必需,也可以用root用户,但不建议):

-- 创建同步主库的账号密码,从库那边会用到
CREATE USER 'repl'@'%' IDENTIFIED BY 'Admin@123.';

接着给创建的用户授权同步复制权限:

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- 主库中对主从同步的账户进行如下设置
ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Admin@123.';
FLUSH PRIVILEGES;

执行命令查看状态,对比发现与基于二进制日志文件的方法不同的是Executed_Gtid_Set会有一个具体的全局事务id值:

在这里插入图片描述3.配置从库:

###主从数据库配置核心部分
[mysqld]
# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 服务器唯一id,默认为1,值范围为1~2^32−1. ;主数据库和从数据库的server-id不能重复
server-id=129

#开启 GTID
gtid_mode=ON
enforce_gtid_consistency=ON

###可选配置
# 需要主从复制的数据库 ,如多个则重复配置
# replicate-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
# binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存 
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一) 
binlog_format=row
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
binlog_expire_logs_seconds=2592000
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件 
relay_log=replicas-mysql-relay-bin
# log_replica_updates表示slave是否将复制事件写进自己的二进制日志,默认值ON开启;8.0.26版本之前使用log_slave_updates
log_slave_updates=ON
# 防止改变数据(只读操作,除了特殊的线程)
read_only=ON

启动从数据库,并执行以下命令设置与主数据库的联系(自8.0.23版本后的语法:):

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.136.128',SOURCE_PORT=3306,SOURCE_USER='repl',SOURCE_PASSWORD='Admin@123.',SOURCE_AUTO_POSITION=1;

最后开启主从复制工作(自8.0.22版本后的语法):

START REPLICA;

执行命令查看详细信息以及状态:

SHOW REPLICA STATUS\G;

假如显示 Slave_IO_Running/Replica_IO_Running 和 Slave_SQL_Running/Replica_SQL_Running 为 Yes ,以及Slave_IO_State/Replica_IO_State 为 Waiting for master to send event/Waiting for source to send event,则证明主从复制成功。
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值