## 主从介绍的原理分析应用场景
* 概念
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)
* 主从同步应用场景
1. 做数据的热备,作为后备数据库,主数据库服务器故障后,可以切换到从服务器继续工作,避免数据丢失。
2. 架构的扩展。将工作负载分发到多个slave节点上,从而提高系统性能。在这个使用场景下,所有的写(write)和更新(update)操作都在Master节点上完成;所有的读(read)操作都在slave节点上完成。通过增加更多的slave节点,便能提高系统的读取速度。
3. 数据分析。实时数据可以在Master节点上创建,而分析这些数据可以在slave节点上进行,并且不会对Master节点性能产生影响
##
## 准备
搭建两台mysql服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读取操作
* 关闭防火墙
```
systemctl stop firewalld
```
关闭selinux
```
vi /etc/selinux/config
SELINUX=disabled
```
##
* 修改主机名
> 方法1:修改hosts文件
```
vi /etc/hosts
47.111.252.189 master
```
`方法2:使用hostnamectl命令`
`[root@xlucas1 ~]# hostnamectl set-hostname master`
##
## master配置
* 修改配置文件
```
[mysqld]
server-id=158
#### ##开启bin-log,默认是开启的
log-bin=/www/server/data/mysql-bin
```
* 重启mysql服务
* 分配用户【允许从数据库复制主数据库】
```
grant replication slave on *.* to 'ganranchong'@'47.114.87.166' identified by '123456';
flush privileges;
```
* 显示主数据库配置信息 [记录bin-log日志,以及位置]
```
show master status;
```
```
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000013 | 329 | | | |
+------------------+----------+--------------+------------------+-------------------+
```
##
## slave配置
* 修改配置文件 [主从服务器中的server-id]
```
[mysqld]
read-only=1
server-id=166
replicate-do-db=db
relay-log=mysql-relay-bin
```
* 重启mysql服务
* 配置主数据信息[位置和bin-log文件在上面显示主数据库配置信息可见]
```
change master to master_host='47.111.252.189',master_user='ganranchong',master_password='123456',master_log_file='mysql-bin.000013',master_log_pos=329;
```
* 启动slave
```
start slave;
```
*检查从数据库配置信息是否正常
```
show slave status\G
```
![](https://img.kancloud.cn/47/87/47877e9267b76d24ee0b1f4800904a79_496x234.png)
> 【结果】slave_IO_Running和slave_SQL_Runing 两个进程正常则表示配置成功
##
## 总结
1. 配置之前做好数据库的备份,然后进行数据初始化。
2. 从数据配置的只读对超级用户不起作用,仍然可以插入。为使主从数据同步一致,不应在从数据库中插入数据,否则会造成数据冲突。
3. 如果是阿里云的服务器,要注意端口权限问题。
##
## 清除主从复制关系
mysql主从复制中,需要将主从复制关系清除,需要取消其从库角色。这可通过执行RESET SLAVE ALL清除从库的同步复制信息、包括连接信息和二进制文件名、位置。从库上执行这个命令后,使用show slave status将不会有输出。
reset slave是各版本Mysql都有的功能,在stop slave之后使用。主要做:
删除master.info和relay-log.info文件;
删除所有的relay log(包括还没有应用完的日志),创建一个新的relay log文件;
从Mysql 5.5开始,多了一个all参数。如果不加all参数,那么所有的连接信息仍然保留在内存中,包括主库地址、端口、用户、密码等。这样可以直接运行start slave命令而不必重新输入change master to命令,而运行show slave status也仍和没有运行reset slave一样,有正常的输出。但如果加了all参数,那么这些内存中的数据也会被清除掉,运行show slave status就输出为空了。
* 删除从服务器数据库配置
~~~
mysql>stop slave;
QueryOK, 0 rowsaffected (0,00 sec)
mysql>reset slave all;
QueryOK, 0 rowsaffected (0,04 sec)
mysql> show slave status\G
Emptyset (0,00 sec)
~~~
RESET SLAVE将使SLAVE忘记主从复制关系的位置信息。该语句将被用于干净的启动, 它删除master.info文件和relay-log.info文件以及所有的relay log 文件并重新启用一个新的relaylog文件。
使用场景:当原来的主从关系被破坏之后,从库经过重新初始化后直接连接会报 ERROR 1201的错误,运行reset slave后,重新配置主从连接就可以了;
* 删除主服务器
【一】RESET MASTER
功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。用于第一次进行搭建主从库时,进行主库binlog初始化工作;
~~~~~~
mysql> reset master;
Query OK, 0 rows affected (0.03 sec)
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
~~~~~~
显示所有的binlog已经被删除掉,且binlog从000001 开始记录
【**注意**】:当数据库要清理binlog文件的时候,可以通过操作系统进行删除,也可以运行reset master进行删除。**但是如果当前是主数据库,且主从数据库正常的时候,千万不能用这种方式删除**。