MySQL8主备
前言
都说MySql8.x比5.7快两倍,可以参考一下。
但不支持从 MySQL 8.0 降级到 MySQL 5.7(或从某个 MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本)。数据备份方式还是可以的。
- 注意
MySql8的用户安全策略的改变 - 注意
MySql8编码格式 - 支撑内网服务器安装
准备
架构设计
主从
服务器配置
192.168.2.31 master server_id=31192.168.2.32 slave server_id=32
安装
MySQL
关闭防火墙
1 | systemctl stop firewalld |
配置
1、MySQL
1 | vim /etc/my.cnf |
2、主备配置
master :server_id=31`log-bin=mysql-bin`slave:server_id=32`log-bin=mysql-bin`
1 | [mysql] |
重启 master、slave
1 | systemctl restart mysqld |
SQL命令:
1 | # 查询默认认证插件 |
3、master库配置
master配置同步账号
SQL命令:
1 | # 这里创建账号不指定地址,一般情况下,需要指定 slave 账号的 IP |
4、slave库配置
查看master
master SQL命令:
1 | show master status; |

在 slave写入 master的配置
slave SQL命令:
1 | -- 停止slave 库 |
启动
启动MySQL
1 | systemctl start mysqld |
slave 启动
SQL命令:
1 | -- 启动从库 |
测试
登录
1 | mysql -uroot -p |
master
SQL命令:
1 | show processlist\G |

Command: Binlog Dump状态为成功。
slave
SQL命令:
1 | -- 查看从库状态 |

这两项都为 Yes则为成功,否则看错误日志,有错误。
查看错误日志
1 | cat /opt/db/mysql_log/mysqld.log |

这是因为的 mysql_data 是复制的,只要修改 auto.cnf 中的
1 | [auto] |
重启服务
1 | systemctl restart mysqld |
正确的 slave结果

数据测试
master插入数据
SQL命令:
1 | show databases; |
slave查询数据
SQL命令:
1 | show databases; |

slave插入数据
1 | insert into test_table values(2); |
主库是不会增加数据的。
操作
同步
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