主从复制的原理
1首先是从服务器的一个IO进程读取从服务器上的master.info中的一个user password port 以及上次读取的位置(position)(就是binlog的一个特性能够查看数据修改的位置)
2然后去主数据库中去查看是否需要更新
3 主库查看二进制文件需要更新,需要更新通过dump thread 将数据发送给从库
4.从库通过IO进程来接收发送过来的二进制日志,存到tcp/IP缓存中,并且返回ACK给我们的一个主库,主库继续工作
5.从库更新master.info数据,(二进制日志更新为新的位置)
6.IO 进程将TCPIP 缓存中的日志信息存放到我们的relay-log.info中去。
7.从库sql进程读取relay-log的获取上次更新的位置,以这个位置为起点继续更新。
8.SQL进程更新完之后,将新的位置给relay-log中去。
binlog 设置为row模式指记录行的变化,不记录表的关联
[mysqld]
binlog_format=row
log-bin=/data/3307/mysql-bin
server-id=3307
port=3307
socket=/data/3307/mysql.sock
[mysqld]
binlog_format=row
log-bin=/data/3308/mysql-bin
server-id=3308
port=3308
socket=/data/3308/mysql.sock
[mysqld]
binlog_format=row
log-bin=/data/3309/mysql-bin
server-id=3309
port=3309
socket=/data/3309/mysql.sock
mysqld_safe --defaults-file=/data/3309/my.cnf
mysql -S /data/3307/mysql.sock
grant replication slave on . to repl @‘10.0.0.%’ identified by ‘centos’;
[root@localhost backup]# mysqldump -A -R --triggers --master-data=2 --single-transaction -S /data/3307/mysql.sock >/tmp/full.sql
[root@localhost backup]# sed -n ‘22p’ /tmp/full.sql
– CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000006’, MASTER_LOG_POS=325;
登录到从库:
help CHANGE MASTER TO 将信息写道我们的msater info中去了
CHANGE MASTER TO
MASTER_HOST='10.0.0.52',
MASTER_USER='repl',
MASTER_PASSWORD='centos',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=325,
MASTER_CONNECT_RETRY=10; #重试次数
start slave;
show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes