Mysql数据库主从复制实现

数据库复制replication的实现原理
1.主服务器凡运行语句,都产生一个二进制日志 binlog
2.从服务器不断读取主服务器的binlog
3.从主服务器读取到的binlog转换为自身可执行的relaylog
4.执行relaylog

实现步骤:
1.首先确保主服务器打开二进制日志功能
这样主服务器一旦有数据变化,立即产生二进制日志
2.从服务器也需要开启二进制日志和relay日志功能
这样可以从主服务器读取binlog并产生relaylog
3.在主服务器建立一个从服务器的帐号,并授予读binlog的权限
4.指定从服务对主的主服务器,开启从服务器。

Mysql数据库主从复制实现

假设:
主服务器ip: 192.168.1.201
从服务器ip: 192.168.1.202

1.主服务器,修改/etc/my.cnf

#每个服务器要取一个独特的id
#开启二进制日志
#声明二进制日志的文件为mysql-bin.xxxx

service-id=201
log-bin=mysql-bin
bingo-format=mixed

解释:
#执行一语句update xxx,时
#语句执行,磁盘改动了
#二进制日志的格式 mixed/row/statement
#statement:二进制记录执行语句,如update…
#row:记录磁盘变化
#mixed:混合的,由系统根据语句来决定。

#哪个好?
#update age=age+1 where id=3; // 语句长而磁盘变化少,宜用row
#update salary=salary+100; // 语句短,但影响上万行,磁盘变化大,宜用statement

2.从服务器,修改/etc/my.cnf

server-id=202
log-bin=mysql-bin
bingo-format=mixed
relay-log=mysql-relay

3.主服务器mysql重启
service mysqld restart

4.从服务器mysql重启
service mysqld restart
修改了my.cnf后都要重启
.
5.查看主服务器状态
show master status;
这个7要用到。

6.在主服务器上创建相应的复制帐号

grant replication client,replication slave on *.* to repl@’192.168.1.%’ identified by ‘repl’;
flush privileges;

7.在从服务器通过语句指定要复制的主服务器(可以一主多从)
change master to master_host='192.168.1.201',master_user='repl',master_port=3306,master_password=‘repl’,master_log_file='mysql-bin.000001’,master_log_pos=72

8.启动从服务器功能

start slave;
show slave status\G;

9.停止和删除同步命令。
stop slave;
reset slave;

可能遇到的问题
EROOR 2002(HY000):Can’t connect to local MySQL server through socket '/tmp/mysqld.sock'
这是 tmp下找不到mysqld.sock文件。
解决方法:
a.指定:
mysql -uroot -p -S /var/lib/mysql/mysql.sock
b.软链接
ln -s /var/lib/mysql/mysql.sock /tmp/mysqld.sock

网通了,3306端口不通。
看一下防火墙。
关闭防火墙。
service iptables stop;

mysql -h192.168.1.202 -uroot -p
select Host,User from user;
权限和host有关。

主从复制的线程是实时连接的,
毫秒级,10几秒。

还有是多源复制的情况,或者只同步指定的数据库或数据表。。。

网上有相关视频:
布尔教育_MySQL高级.022.主从复制原理
布尔教育_MySQL高级.023.主从配置过程
布尔教育_MySQL高级.024.启动主从

重在动手实践。再有问题。欢迎加入PHP技术问答群提问。谢谢阅读!

---------- 招募未来大神 -----------------------

如果您有利他之心,乐于帮助他人,乐于分享
如果您遇到php问题,百度且问了其他群之后仍没得到解答

欢迎加入,PHP技术问答群,QQ群:292626152

教学相长!帮助他人,自己也会得到提升!

为了珍惜每个人的宝贵时间,请大家不要闲聊!

愿我们互相帮助,共同进步!

加入时留言暗号,php,ajax,thinkphp,yii...

猜你喜欢

转载自blog.51cto.com/phpervip/2139367