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,则证明主从复制成功。