主从复制的原理
分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下:
1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave
的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
3).Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的
bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4).Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
实验环境:master:192.168.1.10 backup:192.168.1.20 主从尽量保持版本一样。
1.主服务器上
vim /etc/my.cnf
[mysqld]
server-id = 2
log-bin = /var/lib/mysql/mysql-bin 启用二进制文件
binlog-do-db = jasontest 指定数据库 不指定了 就是全部数据库
保存退出 重启数据库
service mysqld restart
2.在主服务器上建立账户并授权slave
建立bin_slave账号 密码:123456
mysql> grant replication slave on *.* to 'slave_bin'@'%' identified by '123456';
查询master状态
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 498 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
好 主数据库操作完毕 接下来操作从数据库
3.Mysql从配置 192.168.1.20
vim /etc/my.cnf
[mysqld]
server-id = 30 注意id不能相同
log-bin=/var/lib/mysql/mysql-bin 启用二进制文件
保存退出 重启数据库: service mysqld restart
4.设置同步源
change master to master_host='192.168.1.10' 主服务器ip
master_user='slave_bin'
master_password='123456'
master_log_file='mysql-bin.000008’对应master的file
master_log_pos=403; 对应master的position
5.启用同步
start slave;
6.查看状态
show slave status\G;
mysql> show variables like '%log_error%'; 错误日志路径
排错信息