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=31
192.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