MySQL8主主
前言
都说MySql8.x
比5.7
快两倍,可以参考一下。
但不支持从 MySQL 8.0
降级到 MySQL 5.7
(或从某个 MySQL 8.0
版本降级到任意一个更早的 MySQL 8.0
版本)。数据备份方式还是可以的。
- 注意
MySql8
的用户安全策略的改变 - 注意
MySql8
编码格式 - 支撑内网服务器安装
准备
架构设计
主主
服务器配置
192.168.2.33 master33 server_id=33
192.168.2.34 master34 server_id=34
对于目前的状况,很少使用 MySQL
自增主键,解决主键冲突问题的最简单的方式,就是错开主键,可以在 my.cnf
文件中配置。
安装
MySQL
关闭防火墙
1 | systemctl stop firewalld |
配置
1、MySQL
1 | vim /etc/my.cnf |
2、配置
master33 :server_id=33
`log-bin=mysql-bin`master34 :server_id=34
`log-bin=mysql-bin`
1 | [mysql] |
重启 master33
、master34
1 | systemctl restart mysqld |
master33 master34 SQL
命令:
1 | # 查询默认认证插件 |
3、master33
为主库
主备配置
master33
配置同步账号
SQL
命令:
1 | # 这里创建账号不指定地址,一般情况下,需要指定 slave 账号的 IP |
在 master34
写入 master33
的配置
master34 SQL
命令:
1 | -- 停止 slave 库 |
两个都为 Yes
则为成功。
测试 master33
为主库
登录
1 | mysql -uroot -p |
查看主库状态
master33 SQL
命令:
1 | show processlist |
Command: Binlog Dump
状态为成功。
插入数据
1 | show databases; |
master34
查询数据
SQL
命令:
1 | show databases; |
master34
插入数据
1 | insert into test_table values (2); |
在 master33
上数据没有增加。
4、master34
为主库
与步骤 3、master33 为主库
步骤一样。
master34 SQL
命令
1 | # 这里创建账号不指定地址,一般情况下,需要指定 slave 账号的 IP |
master33 SQL
命令:
1 | -- 停止 slave 库 |
错误处理
查看错误日志
1 | cat /opt/db/mysql_log/mysqld.log |
这是因为的 mysql_data
是复制的,只要修改 auto.cnf
中的
1 | [auto] |
重启服务
1 | systemctl restart mysqld |
正确的 slave
结果
操作
同步
master
锁表1
2FLUSH TABLES WITH READ LOCK;
show master status;slave
从库1
2
3
4
5
6-- 写入配置
CHANGE MASTER TO MASTER_HOST='192.168.2.31',MASTER_USER='sync',MASTER_PASSWORD='sync',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=156;
-- 启动从库
start slave;
-- 查看从库状态
SHOW SLAVE STATUS\G;master
解锁1
unlock tables;
推荐
MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
[官方介绍]([https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts