> 数据库 > MySQL >

mysql数据库的主从复制和主主复制实践

准备:
两台装上phpstudy集成环境的计算机(过程忽略)
固定两台电脑的ip(因为mysql数据库是通过ip进行连接,自动获取ip会导致下次重启电脑时,连接就会失效)
步骤1:找到网络连接信息 

这里写图片描述
 
步骤2:创建文本文件,将连接信息记录下来 

这里写图片描述
 
步骤3:将文本记录信息复制到ipv4属性里面 

这里写图片描述
 
步骤4:查看详细信息,配置成功 
 
这里写图片描述

 
 
扩展:
 
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。
 
主从复制:
理解:

理解:

这里写图片描述
 
配置主数据库服务器
找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下两行:
 
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id

这里写图片描述
 
在其中一台计算机上进入mysql命令界面
 
这里写图片描述

 
创建用于从服务器连接的用户账号并授权
 
CREATE USER 'user1'@'192.168.1.101' IDENTIFIED BY 'user1';#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'user1'@'192.168.1.101';#分配权限
flush privileges;   #刷新权限
 

这里写图片描述
 
查看master状态,记录二进制文件名和位置
 
SHOW master STATUS;

 
这里写图片描述
 
配置从数据库服务器
找到从数据库的配置文件my.cnf(或者my.ini),插入唯一服务id:
 
server-id=2 #设置server-id,必须与其他服务器不一样

 
.打开mysql会话,执行以下SQL语句
 
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',#主数据库服务器ip
MASTER_USER='user1',#访问主数据库服务器的用户名
MASTER_PASSWORD='user1',#访问主数据库服务器的密码
MASTER_LOG_FILE='mysql-bin.000002',#主数据库服务器开启的二进制文件名
MASTER_LOG_POS=73;#主数据库服务器开启的二进制文件名的位置
 

 
启动slave同步master
 
start slave;

 
查看slave状态
 
show slave status\G;

这里写图片描述
 
 
主主复制
就是按照主从复制的步骤,将原来的从数据库服务器当做主数据库服务器配置,同理,原来的主数据库服务器当做从数据库服务器配置,这样就可以实现无论哪个服务器插入数据,其他主服务器都能实现数据同步
 
注意:在配置的时候我们需要注意一些问题,例如,主键重复,server-id不能重复等等。
关于主主的配置
server-id=11   #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1   #起始值。一般填第n台主MySQL。例如此时为第一台主MySQL
binlog-ignore=mysql   #忽略mysql库(可写可不写)
binlog-ignore=information_schema   #忽略information_schema库(可写可不写)
replicate-do-db=aa   #要同步的数据库,默认所有库
 

 
注意事项
主主复制配置文件中auto_increment_increment和auto_increment_offset只能保证主键不重复,却不能保证主键有序。
当配置完成Slave_IO_Running、Slave_SQL_Running不全为YES时,show slave status\G信息中有错误提示,可根据错误提示进行更正。
Slave_IO_Running、Slave_SQL_Running不全为YES时,大多数问题都是数据不统一导致。
 
常见出错点:
 
1、两台数据库都存在db数据库,而第一台MySQL db中有tab1,第二台MySQL db中没有tab1,那肯定不能成功。
 
2、已经获取了数据的二进制日志名和位置,又进行了数据操作,导致POS发生变更。在配置CHANGE MASTER时还是用到之前的POS。
 
3、stop slave后,数据变更,再start slave。出错。
 
终极更正法:重新执行一遍CHANGE MASTER就好了。
 


(责任编辑:IT)