通过宝塔面板可以很方便的进行主从配置,可通过界面的修改配置文件;当然如果你的企业有足够的预算,可以直接使用宝塔面板官方的主从复制插件,这里我们自己手动配置主从复制。

一、主库配置

点击首页上的 MySQL 服务图标,进入配置界面:

选择配置修改,可见 MySQL 服务当前的配置内内容:

配置 my.cnf
[mysqld]
#开启log-bin二进制日志
log-bin=mysql-bin
#允许从服务器更新二进制日志
log-slave-updates=1

#配置唯一的服务器ID,一般使用IP最后一位
server-id=81

#binlog 格式 statement、row、mixed
binlog_format=mixed
#不需要同步的数据库,如果有多个,复制多份指定数据库名即可
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

#下面不是必须配置
#使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性
innodb_flush_log_at_trx_commit=1
#使binlog在每1次binlog写入后与硬盘同步
sync_binlog=1
#只保留10天的二进制日志,以防磁盘被日志占满
expire-logs-days=10

检验设置是否成功

先使用下面命令登录数据库:

mysql -uroot -p9e1293cf0855f12e -h127.0.0.1

登录成功后输入下面命令检查:

show variables like 'server_id';

再输入命令:

show variables like 'log_bin';

再输入命令:

#skip_networking默认是OFF关闭状态,启用后,主从服务器将无法相互通信,所以这里必须是 OFF
show variables like '%skip_networking%';

全部检查完毕,主节点设置完成!

二、MySQL主数据库,建立主从复制的账号

登录MySQL之后,执行下面命令:

GRANT REPLICATION SLAVE ON *.* to 'duplicator'@'%' identified by 'Ds472HFfiTTckXNB';
GRANT SUPER ON *.* to 'duplicator'@'%' identified by 'Ds472HFfiTTckXNB';
GRANT RELOAD ON *.* to 'duplicator'@'%' identified by 'Ds472HFfiTTckXNB';

一定要记得授权,不然会报下面的错误:

注意:
上面SQL的作用是创建一个用户【duplicator】密码为【Ds472HFfiTTckXNB】并且给【duplicator】用户授予REPLICATION SLAVE 权限,常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制,如下:

然后执行下面命令:

#查看master的状态
show master status\G

上面结果中的File和Position的值需要记录一下,待会要用到

主库已经配置好了,下面我们开始配置从库

三、从库配置

先在从库上执行下面语句检查下刚刚建立的账号是否可以连接

#IP是主库IP
mysql -uduplicator -p'Ds472HFfiTTckXNB' -h192.168.3.81

如果连接失败,说明使用的主库账号的远程访问权限没开启(需要开启远程访问权限),参考 《MySQL 远程访问权限》 的文章中说明开启主节点的root账号的远程访问,开启后再次重试如下:

配置 my.cnf

然后在【mysqld】节点下面新增下面内容:

[mysqld]
#开启log-bin二进制日志
log-bin=mysql-bin
#使得更新的数据写进二进制日志中
log-slave-updates=1

#配置唯一的服务器ID,一般使用IP最后一位
server-id=82

#binlog 格式 statement、row、mixed
binlog_format=mixed
#需要同步的数据库,如果有多个,复制多份指定数据库名即可
binlog_do_db=testdb

#relay-log-info-repository=TABLE
#relay-log-recovery
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

如下:

然后重启数据库,并查看刚配置的是否生效:

mysql -uroot -p42d464110d0c139f;
show variables like 'server_id';
show variables like 'log_bin';

如果报错:

那就执行:

ALTER USER USER() IDENTIFIED BY '42d464110d0c139f!';

就可以了执行了:

配置复制参数

配置同步,注意 MASTER_LOG_FILE 和 MASTER_LOG_POS 的值要与 Master 的一致:

执行下面命令(从数据库账号登录后操作):

CHANGE MASTER TO MASTER_HOST='192.168.3.81',MASTER_PORT=13306,MASTER_USER='duplicator',MASTER_PASSWORD='Ds472HFfiTTckXNB',MASTER_LOG_FILE='mysql-bin.000016',MASTER_LOG_POS=154;

下面是主库的参数:

如果执行提示下面失败,表示权限不足:

授权后再执行前面的SQL, 如果执行失败,就执行:reset slave;

我这里执行成功了,就可以执行下面SQL语句启动主从了:

start slave;

查看从库状态

执行下面命令查看从库状态:

show slave status\G

参数介绍:

# 负责与主机的io通信
Slave_IO_Running: Yes

# 负责自己的slave mysql进程
Slave_SQL_Running: Yes

若出错,则清理掉之前的配置,执行以下命令:

mysql> stop slave;
mysql> reset slave all;

注:Slave_IO_Running:写入状态。Slave_SQL_Running:本地数据库运行状态。当2个状态均为yes时,证明数据库主从状态设置成功。

show variables like 'datadir';
select uuid();
如果Slave_IO_Running状态为no的时候,可能是server uuid的值就和主服务器是一样的。因为是复制来的,可能一样。这个时候,可以将从服务器里面的 auto.cnf 文件删除。重启服务就会生成一个新的。

如果Slave_SQL_Running状态为No时,一般是主从数据库的初始数据不一致导致的。

解决上面问题之后。再次执行配置从服务器Slave,当2个都为yes的时候,主从服务器配置完成。可以在主库新建一个数据库。从库就会自动创建。这时候不要去操作从库,因为修改会导致主从失败。

测试

在我本地用Navicat工具连接主库和从库:

当前两个库都是一样的库,现在在主库上面新建一个【testdb】数据库,然后从库直接刷新,就可以看到这个数据库了,同样的,你在主库上新建什么表,添加什么数据,刷新从库后,会发现,数据都在了,说明测试成功了,现在主从复制功能就实现了:

参考文章:

https://blog.csdn.net/wujiangbo520/article/details/128150824

作者:Jeebiz  创建时间:2023-01-15 12:22
最后编辑:Jeebiz  更新时间:2024-08-22 10:22