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=33192.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