## 主从介绍的原理分析应用场景 * 概念 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(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进行删除。**但是如果当前是主数据库,且主从数据库正常的时候,千万不能用这种方式删除**。