一、环境:

主库(master)和从库(slave)均为刚刚安装好,且都是默认的数据库,也就是说两台服务器上的数据均相同

二、MySQl实际复制过程概述:

1)在主库上把数据更改记录到二进制日志(Binary log),这些记录被称为二进制日志事件

2)备库将主库上的日志复制到自己的中继日志(Relay Log)

3)备库读取中继日志中的事件,将其重放到备库数据之上

 

二进制日志:用于保存节点自身产生的事件,每次重启服务,都会产生一个,/var/lib/mysql/下面.

中继日志:用于保存接受自其他节点的事件(也是二进制格式)

 

整个过程:master将改变记录到二进制(binary log),slavemasterbinaryt 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