【mysql】mysql实现主从复制(Linux)

来源:互联网 发布:安卓新版淘宝指纹支付 编辑:程序博客网 时间:2024/05/29 11:01

前言

        之前写过Windows版本的MySQL主从复制,和Linux的基本一致,权当重新温习一遍罢。

原理

        原理这个东西上次没有写,一并补上。


        Master上有一个IO线程,Slave上有两个线程,分别是IO和SQL。下面是主从复制五步原理。

1、Slave服务器执行start slave;

2、Slave服务器会通过在Master上授权的复制用户权限请求连接Master服务器,并请求从指定Binlog日志文件的指定位置之后发送Binlog日志内容;

3、Master服务器接收到来自Slave服务器的IO线程的请求后,Master服务器上负责复制的IO线程根据Slave服务器IO线程请求的信息读取指定Binlog日志文件指定位置之后的Binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了Binlog日志内容外,还有本次返回日志内容后再Master服务器端的新的Binlog文件名称以及在Binlog中的下一个指定更新的位置;

4、当Slave服务器的IO线程获取到来自Master服务器上的IO线程发送日志内容及日志文件及位置点后,将Binlog日志内容依次写入到Slave端自身的Relay Log(中继日志)中文件(MySQL-relay-bin.xxxxxx)的最末端,并将新的Binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新Binlog日志时能够告诉Master服务器需要从新Binlog日志的哪个文件哪个位置开始请求新的Binlog日志内容;

5、Slave服务器端的SQL线程会实时的检测本地的Relay Log中新增加的日志内容,然后及时的把Log文件中的内容解析成在Master端曾经执行过的SQL语句,并在自身Slave服务器上安语句的顺序执行应用这些SQL语句,应用完毕后清理应用过的日志。

MySQL主从复制

1、设置server-id,logbin

#vi /etc/my.cnf(server-id主从不同即可)


        主机需要设置server-id和log-bin,如果只是主从复制的话,从机只需要设置server-id,如果需要互为主从,就需要两个都配置。

2、Master建立账户并授权Slave

mysql>grant replication slave on *.* to 'rep'@'192.168.%.%' identified by 'root';//授权一个用户名为rep,密码为root的账户,*.*代表所有库的所有表(可以指定库.表),ip代表只能该ip段下有权限访问。


3、查询Master状态

mysql>show master status;//记录此时的file和position,停止更新主库,必要时可上锁:flush table with read lock;


4、配置Slave

mysql>change master to

         >master_host='Master地址',

         >master_port=mysql端口号,//不加引号

         >master_user='rep',

         >master_password='root',

         >master_log_file='第三步记录的file',

         >master_log_pos=第三步记录的position;//不加引号

5、启动Slave主从复制功能

mysql>start slave;

6、检查Slave状态

mysql>show slave status\G;


7、重启mysql,刷新权限

#service mysql restart//重启

mysql>flush privileges;//刷新权限

总结

        现在基本就可以就没有什么问题了,如果需要进行互为主从的配置,只需要把上边的操作,主从换一下,再来一遍就可以了,没有什么难度。

原创粉丝点击