mysql的复制

MYSQL的复制

复制原理

复制原理分为三个步骤:
主服务器把数据更新记录到二进制日志中
从服务器把主服务器的二进制日志拷贝到自己的中继日志中
从服务器重做中继日志中的时间,把更新应用到自己的数据库上

从服务器有两个进程:一个是I/O线程,负责读取主服务器的二进制日志,并将其保存为中继日志;另一个是SQL线程,复制执行中继日志

复制的流程

1配置master;
2:配置slave;
3:将slave连接到master

复制的具体操作

配置master

1)修改/etc/m.cnf 配置master

server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

解析:log-bin 给出了二进制产生的文件的基本名;login-bin-index给出了二进制索引文件的文件名。每一个服务器都应该有唯一的server-id。
修改之后重启master使配置生效
2)在master创建一个复制用户

mysql> create user repl_user;
Query OK, 0 rows affected (0.00 sec)
mysql> grant replication slave on *.* to rel_user identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)

解析:replication slave权限并没有什么特别之处,只是让这个用户能够从master上取的二进制日志的转储数据。

配置slave

1)配置my.cnf文件

server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

2)链接master和slave
将slave指向master,让它直到从哪里复制,为次需要知道master的主机名,端口号,master上拥有replication slave权限的帐号和密码

mysql> change master to master_host='master-1', master_port=3306, master_user='repl_user', master_password='redhat';
Query OK, 0 rows affected (0.27 sec)

然后执行start slave开始执行复制

观察复制的动作

mysql> select * from ll;
mysql> flush logs;   
Query OK, 0 rows affected (0.30 sec)

Flush logs 命令以强制轮换二进制日志,从而得到一个完整的二进制文件
mysql> show binlog eventsG 检查二进制文件里有哪些事件

mysql> show master status; 命令来查看当前正在写入的是哪个二进制文件
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000004 |      106 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

析:reset master(在master上)删除所有的二进制文件,确保没有slave链接到该master上;
Reset slaves(在slave上),先执行stop slave命令,确保slave上没有活动的复制

复制后续

刚才的复制并没有说明复制从哪里开始,所以slave将从他开始,读取master的二进制文件。这里change master to命令有两个有用的参数,即master_log_file
Master_log_pos。使用这些参数指定master开始发送时加的binlog位置,而不是从头开始。

> change master to master_host='172.25.254.224',master_port=3306,master_user='repl_user',master_password='redhat',master_log_file='master-bin.000004',master_log_pos=106;
原文地址:https://www.cnblogs.com/hanfei-1005/p/5691033.html