通过宝塔面板可以很方便的进行主从配置,可通过界面的修改配置文件;当然如果你的企业有足够的预算,可以直接使用宝塔面板官方的主从复制插件,这里我们自己手动配置主从复制。
一、主库配置
点击首页上的 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 更新时间:2024-08-22 10:22