多台服务器mysql数据库数据同步

3台服务器的多主架构,3台服务器都可以写入并且做到3台服务器的数据一致性(任意一台服务器做写入操作都可以,并且每台服务器的数据做到完全一致),并且防止主键冲突.目前只有3台MySQL服务器,不使用生成唯一id的程序。

在3台主服务器上创建mysql用户创建用户(使用root也可以,但是不建议) , 该用户必须有 REPLICATION SLAVE 权限
创建用户:CREATE USER ‘cong’@‘192.168.43.%’ IDENTIFIED WITH mysql_native_password by ‘123456’;
赋权:GRANT REPLICATION SLAVE ON . TO ‘cong’@‘192.168.43.%’;
刷新权限:flush privileges;
在从服务器上测试使用主服务器刚刚创建的账号是否能够正常连接 例如
/usr/local/mysql/bin/mysql -ucong -p123456 -h192.168.43.210

停止主、从服务器的mysql服务
例如 /etc/init.d/mysql stop

主服务器必须打开开二进制日志 例如 vi /etc/my.cnf (根据实际路径)
主要是修改配置文件 , 一般在 linux 下安装的 mysql 配置文件是 my.cnf, 在
windwos 下是 my.ini,
修改主服务器配置文件vi /etc/my.cnf:
1.MySQL的生成二进制日志时会记录server-id值,因此在通过二进制日志同步时不会产生无限循环同步的问题。
2.防止主键冲突可以通过调整MySQL自增主键的步长和初始值来解决.例如配置文件可做如下更改。
auto_increment_increment= 3或者其他值 如果设置为2自增时每次+3
auto_increment_offset= 2或者其他值 偏移量 也就是默认从哪个值开始自增
3.mysql作为从服务器同步数据时如果也需要记录到二进制日志中,可以通过参数log-slave-updates= on来设置。

每台主机的 server-id与偏移量不同,而且每台的uuid也不同。
** uuid在auto.cnf中修改:
vi /usr/local/mysql/var/auto.cnf
假设这三台服务器ip分别为: 192.168.43.210 192.168.43.211 192.168.43.212
则192.168.43.210的my.cnf配置为:

server-id=1
auto_increment_increment= 3
auto_increment_offset= 1
log-slave-updates= on

211,212修改server-id与auto_increment_offset,使三台服务器不同。

log-bin= 二进制文件的位置 # 主服务器需打开二进制日志 可以是默认值也 可以创建新目录并且赋予可写权限
例如log-bin=/usr/local/mysql/binlog/bin-log
默认日志文件在mysql安装目录下的var目录下
binlog-do-db=mydata # 需要同步的数据库 默认都同步
#binlog-ignore-db= # 需要忽略的数据库 默认不忽略任何数据库
启动mysql服务 /etc/init.d/mysql start
如果使用了默认的二进制日志配置 需要将原始日志文件删除后再启动mysql服务,(cd /usr/local/mysql/var)启动后可以查看二进制日志目录下是否生成新文件,如果已经生成日志文件说明配置是正确的。

启动mysql服务 /etc/init.d/mysql start
进入mysql命令 行执行命令
1. change master to master_host=’ 主 服务 器 地 址 ‘, master_user=’ 用 户名 ‘,
master_password=’ 密码 ',
master_port= 端口号 ,MASTER_CONNECT_RETRY=10;
例如在192.168.43.210上执行 :

change master to master_host='192.168.43.211',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;

192.168.43.211上执行 :

change master to master_host='192.168.43.212',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;

192.168.43.212上执行 :

change master to master_host='192.168.43.210',master_user='cong',master_password='123456',master_port=3306,master_connect_retry=10;

2. 再执行

 start slave;

3. 在从服务器输入命令

show slave status\G;

查看状态 :

Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.16.6
Master_User: slave
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 903
Relay_Log_File: relaylog.000004
.........

显示:Slave_IO_State: Waiting for master to send event 连接成功。
在主服务器上建立数据库数据表后查看从服务器 , 看是否配置成功。
撤销配置 :
进入命令行执行 stop slave; 再执行 reset slave; 即可 .

你可能感兴趣的:(多台服务器mysql数据库数据同步)