一、环境:
主库(master)和从库(slave)均为刚刚安装好,且都是默认的数据库,也就是说两台服务器上的数据均相同
二、MySQl实际复制过程概述:
1)在主库上把数据更改记录到二进制日志(Binary log)中,这些记录被称为二进制日志事件
2)备库将主库上的日志复制到自己的中继日志(Relay Log)中
3)备库读取中继日志中的事件,将其重放到备库数据之上
二进制日志:用于保存节点自身产生的事件,每次重启服务,都会产生一个,/var/lib/mysql/下面.
中继日志:用于保存接受自其他节点的事件(也是二进制格式)
整个过程:master将改变记录到二进制(binary log)中,slave将master的binaryt log event拷贝到
它的中继日志中,重做中继日志中的事件.
中继日志的管理交给slave(从动装置),从动装置会启用两个进程分别为:IO_thread(会与主库建立一个普通的客户端连接,此时主库上的二进制转储进程被唤醒,将主库上的二进制日志读给slave,slave会派IO_thread进程处理接受到的二进制数据(接受和保存二进制数据到中继日志),slave的另外一个进程SQL_thread执行中继日志里的sql,这样就能达到复制的效果了.
小提示:
select user,host,password from mysql.user;
delete from user where user=””这里删除匿名用户,不然创建的用户无法登陆
delete from mysql.user where user=”shenge1” 删除shenge1用户
mysql -u shenge1 -h 192.168.200.155 --password=lin*****(客户端连接服务器)
三、具体操作:
1.在主服务器上创建复制账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*
TO repl@’192.168.200.%’ IDENTIFIED BY ‘p4ssword’;
注释:加了%则ip必须要用单引号括起来,%匹配任意
grant 权限 on 数据库对象 to 用户
权限:REPLICATION SLACE,REPLICATION CLIENT
数据库对象:*.*(*.*说明数据库.表名)
用户:repl 那个%号是通配符,表示用户relp能在192.168.200.1~192.168.200.254所在的服务登录密码:p4ssowrd
2.配置主库和备库
主库:
假设主库是server1,需要打开二进制日志并指定一个独一无二的服务ID(server ID),在主库的/etc/my.cnf文件中增加或修改如下:
[mysqld]
log_bin=mysql-bin
Server_id =10
然后重启mysqld来重新读取配置文件/etc/my.cnf,
show variables like ‘log_bin’; #这条语句能查看/etc/my.cnf里的选项的值例如show variables like 'server_id';等
show master status;
备库:
在/etc/my.cnf中添加
[mysql]中
log_bin=mysql-bin
server_id=2
relay_log=/var/lib/msyql/mysql-relay-bin
read_only=1
3.启动复制
这一步是告诉备库如何连接到主库并重放其二进制日志,这一步不需要修改my.cnf来配置,而是使用CHANGE MASTER TO语句,改语句完全替代了my/cnf中相应的设置,并且允许以后指向别的主库时无须重启备库
在备库端,vi 01.sql
change master to master_host=’192.168.200.155’,
master_user=’repl’,
master_password=’p4ssword’,
master_log_file=’mysql-bin.000001’,
master_log_pos=0;
:wq
mysql < 01.sql > a.txt
show slave status\G
start slave;(ok,结束了)
注意:主端重启,这个slave仍会有效,只要网络没问题,都有效,并且监听主端的日志
是目前主端的最新二进制日志,每次主端重启服务都会产生新的二进制日志.并且
master_log_file也会变成主机最新的二进制文件,从端的relay_log_file的编号也和
主库的master_log_file编号相同.
show processlist\G:可以查看所有进程
注释:master_host为主服务器的ip地址
master_user为主服务器上同步数据库的用户
master_password为主服务器上同步数据库的用户密码
master_log_file为主服务器上的二进制日志文件名,在主服务器上可以通过show master status获得二进制日志文件名
四、遇到的问题:
1.注意主服务器上的iptables
2.ERROR 1201 (HY000):Could not initialize master info structure
原因:在这之前做过主从复制,并且失败了。
方法:
stop slave;
reset slave;
vi 01.sql
change master to master_host=’192.168.200.155’,
master_user=’repl’,
master_password=’p4ssword’,
master_log_file=’mysql-bin.000001’,
master_log-pos=0;
:wq
mysql < 01.sql > a.txt