1. 为什么需要主从复制?
2. 什么是主从复制?
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个 或多个 从节点。
MySQL 默认采用异步复制 方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中所有的数据库或者特定的数据库,或者特定的表。
3. 原理
master服务器 将数据的改变记录二进制binlog日志 ,当master上的数据发生改变 时,则将其改变写入二进制日志中。slave服务器 会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread 请求master二进制事件。- 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中。
- 从节点将
启动SQL线程 从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致。 - 最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
总结:
从库 生成两个线程,一个I/O线程,一个SQL线程,一定要保证这两个是开启 的状态。I/O线程 会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中。- 主库会生成一个
log dump线程 ,用来给从库I/O线程传binlog。 - SQL线程,会读取
relay log 文件中的日志,并解析成sql语句逐一执行。
4. 配置
4.1 准备两台服务器(已经安装了MySQL)
master:xxx
slave:xxx
4.2 修改配置
两台机子同时创建一个同名的数据库。
create database test_db charset=utf8mb4;
4.2.1 master 主服务器
sudo vim /etc/mysql/my.cnf
[mysqld]
log-bin=master-bin
binlog-format=ROW
server-id=1
binlog-do-db=test_db
grant replication slave on *.* to 'root'@'%' identified by 'root';
flush privileges;
service mysql restart
show master stataus
4.2.2 slave 从服务器
这个server-id 记得一定要和主服务器的不一样 !
service mysqld restart
change master to master_host='主服务地址',master_user='root',master_password='root',master_port=3306,master_log_file='master-bin.000001',master_log_pos=154;
这个master_log_file 就是上面那个show master stataus 的信息。 这个master_log_pos 就是上面那个show master stataus 的信息。
start slave
show slave status \G(注意没有分号)
当我们看着这两个都是YES 的时候就可以了,注意不能是其他CONNECTING
stop slave
4.2.3 验证
-
master 主服务器 -
slave 子服务器
两个服务器都是空 的状态
那首先我们可以先在master节点 上进行插入一条语句
然后在slave节点 上查看 于是我们看到已经实现主从复制 了。
|