mysql之主从复制
一、用途及条件
mysql主从复制用途
- 实时灾备,用于故障切换
- 读写分离,提供查询服务
- 备份,避免影响业务
主从部署必要条件:
- 主库开启binlog日志(设置log-bin参数)
- 主从server-id不同
- 从库服务器能连通主库
二、主从复制的原理
mysql主从复制原理
![](https://images2015.cnblogs.com/blog/820365/201608/820365-20160821160615776-1749314661.png)
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
三、配置主从复制
1.配置server-id
[root@ping ~]# egrep "server-id" /etc/my.cnf server-id=1
2.授权用户,用于同步主的数据
mysql> grant replication slave on *.* to 'rep'@'192.168.100.%' identified by '123456'
3.导出主的数据库到当前目录
[root@master ~]# mysqldump -uroot -p123456 --events -A -B --single-transaction --master-data=1 > `date "+F"`-all.sql
4.查看授权用户是否在user表中创建
mysql> select concat_ws('@',user,host) from mysql.user; +--------------------------+ | concat_ws('@',user,host) | +--------------------------+ | ping@192.168.100.% | | rep@192.168.100.% | | root@ping.cn | +--------------------------+
5.将内存中的数据刷新到磁盘
mysql> flush privileges;
6.配置从服务器server-id
[root@slave1 ~]# egrep "server-id" /etc/my.cnf server-id=2
7.配置
mysql> change master to master_host='192.168.100.6', master_user='rep', master_password='123456';
8.将备份的主库文件导入到从服务器中
mysql>source /root/2018-02-26-all.sql
9.开启从服务
mysql>start slave
10.查看从服务状态
mysql> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes
四、测试
1.删除主服务器数据库
mysql> drop database test; Query OK, 0 rows affected (0.01 sec)
2.查看从服务器数据库
mysql> show databases; +------------------------------+ | Database | +------------------------------+ | information_schema | | mysql | | performance_schema | +------------------------------+ 5 rows in set (0.00 sec)