【MySQL】mysql实现主从复制(Linux)
前言
之前写过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;//刷新权限
总结
现在基本就可以就没有什么问题了,如果需要进行互为主从的配置,只需要把上边的操作,主从换一下,再来一遍就可以了,没有什么难度。