mysql 8.0 搭建主从集群注意事项
mysql 8.0 的集群搭建方式和mysql 5.7的搭建方式,有点不同,命令改了。官方文档写的很全(又臭又长),所以写一篇笔记,简单总结下怎么搭建。
怎么安装mysql 8.0就不赘述了,假设两台机器已经完成数据初始化。
假设有两个主机,分别为: 192.168.0.6(主节点)、192.168.0.7
配置文件
- my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 主从节点的id,要不一样
server-id=1
# 一定要加,用于创建主从复制账号时,设置账号的认证方式为简单密码认证。
# CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'xx';
mysql_native_password=ON
# 大小写不敏感
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
主节点
创建用户
CREATE USER 'copyuser'@'%' IDENTIFIED WITH 'mysql_native_password' BY '你的密码';
grant replication slave on *.* to 'copyuser'@'%';
FLUSH PRIVILEGES;
获取主节点日志坐标
坐标有两个维度,一个是当前日志文件名字,一个是文件中的位置。
从节点执行CHANGE REPLICATION SOURCE
时要对应上。
mysql> SHOW BINARY LOG STATUS\G
*************************** 1. row ***************************
File: binlog.000002 # 坐标1,日志文件
Position: 1948 # 坐标2:日志文件位置
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
从节点
创建用户
CREATE USER 'copyuser'@'%' IDENTIFIED WITH 'mysql_native_password' BY '你的密码';
grant replication slave on *.* to 'copyuser'@'%';
FLUSH PRIVILEGES;
设置主节点
SOURCE_HOST
: 填主节点的IP192.168.0.6
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主节点的ip',
SOURCE_USER='copyuser',
SOURCE_PASSWORD='你的密码',
SOURCE_LOG_FILE='binlog.000002',
SOURCE_LOG_POS=1948;
开启主从复制
为什么把start slave 改成start replica,只能说只是文化原因,slave是奴隶的意思,带有歧视色彩,尤其在漂亮国。作为一个应用广泛的数据库,必须要政治正确啊。
- 开启主从复制
start replica;
- 查看主从复制状态
mysql> show replica status\G;
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: xxx
Source_User: copyuser
Source_Port: 3306
Connect_Retry: 60
Source_Log_File: binlog.000003
Read_Source_Log_Pos: 158
Relay_Log_File: mysql-node2-relay-bin.000002
Relay_Log_Pos: 325
Relay_Source_Log_File: binlog.000003
# ...
Last_Errno: 0
Last_Error: # 这里的错误为空,代表主从搞成功了
测试主从
主节点上执行:
create database test;
从节点上查看数据库,执行以下语句,看看刚才主节点上建的库有没有?:
show databases;
附录
创建用户:
# 修改原来用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 创建远程登录用户
CREATE USER 'root'@'%' IDENTIFIED BY 'xxx';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;