1panel配置mysql主从复制(保证数据库安全

mysql主从复制简介:
两个mysql,本身没有什么联系,
配置主从复制之后,
主(master)负责给网站提供数据库服务(增删改查)
从( Slave)负责同步主库的数据,用于数据库备份(不参与网站运行)
形象例子:当主库(master)拿到一个菜谱(数据),做出来的菜很不错,就把菜谱(数据)分享给了从库(slave),从库也做了一样的菜。

好处
1.主库(master)炸了,可以直接从从库(slave)取数据,然后重装主库,导入备份,即可恢复业务.
2.主库(master)可以有更好的性能,因为备份在从库进行,主库不需要“锁表”
(可以理解为关煤气灶的时候,先关气罐阀门,然后关掉灶台阀门,避免燃气管道里面残余液化气造成危险.数据库备份的时候需要先禁止“删除”“修改”“增加”操作,然后才能备份)

缺点
配置好之后,原来主库(master)里面的数据不会自动同步给从库(slave),只能同步新数据(我是直接备份主库数据,让后删掉网站数据库,重新创建网站数据库,导入备份,这样从库就有备份了)

事前准备
1.两台服务器,最好是可以内网互联的,公网也可以,但尽量内网,理论稳定不少。
2.都安装1panel面板(网址: https://1panel.cn/
3.两个面板里面都安装同一个版本的数据库!(注意!!!!最好是同版本数据库,跨版本可能有位置问题!!!)
4.主库(master)开启【端口外部访问】,如下图

然后就准备好了,可以开始配置了

配置主库(master)
打开主库的配置文件,如下图操作
屏幕截图 2024-03-04 205441

打开【my.cnf文件】
输入如下内容

[mysqld]
server-id=100
log-bin=mysql-bin

如下图所示的样子
image
(注意!!!!!一定要放在顶部,第一行开始!!!!否则会报错!!!)

然后重启主库(master)

获取主库的root密码

打开主库的终端(命令行)

点击连接
image

输入以下命令,打开与数据库连接(将“123456”换成前面提到的,主库的root密码)

mysql -uroot -p123456

回车,看到这个就成功了
image

输入如下命令(创建一个从库访问的用户,可以理解为“主库小号”可以让从库获取数据)(如果不懂,就不要改,直接输入就行,123456不需要替换)

CREATE USER ‘slave’@‘%’ IDENTIFIED BY ‘123456’;

看到下图这个,就算成功了
image

输入命令(给小号授予访问的权限,不然无法访问)

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘slave’@‘%’;

看到下图这个,就成功了
image

至此,主库配置完毕

从库(slave)配置
这个相对简单,和主库一样,修改【my.cnf文件】,也是放在顶部,输入内容如下(不懂建议不要改)(修改my.cnf的方法,上面有写,这里不重复)

[mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin

如下图所示

连接主从数据库
【操作主库】
进入主库(master)的终端,前面提到了方法,变成如下图的样子即可

输入以下内容

show master status;

你会看到以下内容
image

(File 和 Position 字段的值后面将会用到,在后面的操作完成之前,需要保证 Master 库不能做任何操作,否则将会引起状态变化,File 和 Position 字段的值变化。)

【操作从库】
进入从库(slave)的终端,方法同上
输入以下内容

CHANGE MASTER TO master_host = ‘172.17.0.2’,
master_user = ‘slave’,
master_password = ‘123456’,
master_port = 3306,
master_log_file = ‘mysql-bin.000001’,
master_log_pos = 617,
master_connect_retry = 30;


继续输入以下内容

show slave status \G;

你会看到SlaveIORunning 和 SlaveSQLRunning 都是 No
image

继续输入以下内容

start slave;

最后输入

show slave status \G;

(SlaveIORunning 和 SlaveSQLRunning 都是 Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。)
image

至此,设置完成

功能测试
在主库(master)创建一个新的数据库(网站数据库)

在从库(slave)点击【从服务器获取】,如果出现了新数据库,那就成功了

注意/常见问题
1.所有命令/配置文件内容,都是英文标点符号!!
2.仔细看,参数不要填错。配置期间,不要运行业务(网站)程序!!
3.尽可能内网,外网网络不稳定可能导致数据同步错误!!

参考教程(真的是参考,部分地方有问题,本教程修复了,也对1panel进行适配操作了) 基于 Docker 的 MySQL 主从复制搭建及原理(真正弄懂) | MySQL 技术论坛 (learnku.com)