在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且都能向外提供服务。配置的时候需要注意:主键重复,服务器id不能重复。
1。新建数据库
Ubuntu16.04,开启两个虚拟机。
配置前,两个mysql分别新建一个数据库,保证的测试数据库的数据一致
创建数据库测试的默认字符集utf8默认核对utf8_general_ci;
2。修改配置文件
vim/etc/mysql/mysql.conf.d/mysqld.cnf
服务器一个(192.168.8.129)配置如下
bind-address=0.0.0.0
log_bin=/var/log/mysql/mysql-bin.日志#开启二进制日志
服务器id=1 #任意自然数n,只要保证两台MySQL主机不重复即可
expire-logs-days=100
replicate-do-db=测试#要同步的数据库,默认所有库
binlog-ignore-db=MySQL #忽略MySQL库
binlog-ignore-db=information_schema #忽略information_schema库
auto-increment-increment=2 #步进值,有n台主MySQL就填n
auto-increment-offset=1 #起始值。第n台主MySQL,此时为第1主MySQL
服务器B(192.168.8.131)配置
bind-address=0.0.0.0
log_bin=/var/log/mysql/mysql-bin.日志
服务器id=2
expire-logs-days=100
replicate-do-db=测试
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=2 #起始值,第2台主mysql
二者只有服务器id不同和自动递增,抵消不同
auto-increment-offset是用来设定数据库中自动增长的起点的,两个服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db指定同步的数据库,我们只在两台服务器间同步测试数据库.auto-increment-increment的值应设为整个结构中服务器的总数,本例用到两台服务器,所以值设为2
3。重启mysql服务
/etc/init。d/mysql重启
4。创建共享用户
创建一个可以在另一台主机上登录的MySQL用户repl
看是否有MySQL中是否有repl这个用户
使用MySQL;
选择用户从用户;
5。测试是否能够远程登录
在服务器一个上(192.168.8.129)
MySQL - h 192.168.8.131 - u repl - p
输入口令jvkpxdYrlz
若成功,则继续下一步
若失败,检查mysqld.cnf文件中的配置,可能因为bind-address=127.0.0.1导致,使得仅允许本机访问。
-
<李>分别查看二进制日志名和位置
显示主状态;
李> <李>相互授权用户
在两台服务上分别先停止奴隶
停止奴隶;
在服务器一个上(192.168.8.129)
修改主MASTER_HOST=192.168.8.131, MASTER_USER=repl, MASTER_PASSWORD=皃asswd”, MASTER_LOG_FILE=' mysql-bin。000002年,MASTER_LOG_POS=154;
在服务器B上(192.168.8.131)
修改主MASTER_HOST=' 192.168.8.129’, MASTER_USER=' repl, MASTER_PASSWORD=' passwd mysql-bin, MASTER_LOG_FILE=?00002年,MASTER_LOG_POS=154;
再启动奴隶
开始奴隶;
8。查看奴隶状态
显示奴隶状态\ G;
正确结果如下图所示:
Mysql主主复制配置