Mysql主从复制 朱雀 2020-09-26 11:38 1303阅读 0赞 MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70][] MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。 这里我们实现一主一从。 **实现MySQL主从复制需要进行的配置:** * 主服务器: * 开启二进制日志 * 配置唯一的server-id * 获得master二进制日志文件名及位置 * 创建一个用于slave和master通信的用户账号 * 从服务器: * 配置唯一的server-id * 使用master分配的用户账号读取master二进制日志 * 启用slave服务 具体实现过程如下: 一、准备工作: 1.主从数据库版本最好一致 2.主从数据库内数据保持一致,数据库名称保持一致 主数据库:106.15.184.65 /linux 从数据库:47.111.97.134 /linux 二、主数据库master修改: **1.修改mysql配置** 找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在\[mysqld\]部分插入如下两行: [mysqld] binlog-do-db=maple #主从复制的数据库的名字 binlog-ignore-db=mysql #忽略mysql数据库 log-bin=mysql-bin #开启二进制日志 server-id=65 #设置server-id 一般取IP最后一段 **2.重启mysql,创建用于同步的用户账号** service mysqld restart mysql -uroot -ppasswd 为从服务器创建用户并授权:用户:rel1密码:slavepass mysql> CREATE USER 'repl'@'47.111.97.134' IDENTIFIED BY 'slavepass';#创建用户 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'47.111.97.134';#分配权限 mysql>flush privileges; #刷新权限 如果创建用户时候报错的话,如下图所示:报 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70 1][] 这样处理: set global validate\_password\_policy=0; set global validate\_password\_length=3; 再执行上面创建用户的命令即可。 **3.查看master状态,记录二进制文件名(**mysql-bin.000004**)和位置(**154**):** ![20190409134701216.png][] 二、从服务器slave修改: **1.修改mysql配置** 同样vim /etc/my.cnf,添加server-id [mysqld] server-id=134 #设置server-id,必须唯一 **2.重启mysql,打开mysql会话,执行同步SQL语句**(需要主服务器主机名,登陆凭据,二进制文件的名称和位置): service mysqld restart mysql -uroot -p 登陆 mysql> CHANGE MASTER TO MASTER_HOST='106.15.184.65', MASTER_USER='repl', MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=154; ![20190409135035170.png][] **3.启动slave同步进程:** start slave; **4.查看slave状态:** show slave status\G; ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70 2][] 当Slave\_IO\_Running和Slave\_SQL\_Running都为YES的时候就表示主从同步设置成功了 接下来就可以进行一些验证了, * 在主master数据库的新增一张repl\_test表 CREATE TABLE `repl_test` ( `id` bigint(33) NOT NULL AUTO_INCREMENT, `name` varchar(64) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='主从测试'; 去从slave数据库里看,发现从服务器已经同步过来了。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70 3][] 然后我们在主表新增数据 ![2019040913152248.png][] 发现从表也有 ![20190409131540618.png][] 但是我们在从表新增 ![20190409131558760.png][] 发现主表里还是没有 ![20190409131615635.png][] * 关闭slave(mysql>stop slave;)然后再修改master ![20190409131810778.png][] 观察slave,还是没有变。 ![20190409131835993.png][] 到此为止,主从复制就完成啦 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70]: /images/1601120304127.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70 1]: /images/1601120285563.png [20190409134701216.png]: /images/1601120266365.png [20190409135035170.png]: /images/1601120246048.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70 2]: /images/1601120228946.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzMTAxNjc1_size_16_color_FFFFFF_t_70 3]: /images/1601120213424.png [2019040913152248.png]: /images/1601120195474.png [20190409131540618.png]: /images/1601120180784.png [20190409131558760.png]: /images/1601120165147.png [20190409131615635.png]: /images/1601120149887.png [20190409131810778.png]: /images/1601120133601.png [20190409131835993.png]: /images/1601120115630.png
相关 mysql 主从复制westos_mysql主从复制 master //show master status\\g; show slave status\\G; 关闭防火墙和selinux 如下是一个线性的数据同步 主机一、19 一时失言乱红尘/ 2022年10月28日 13:25/ 0 赞/ 55 阅读
相关 MySQL主从复制 主从复制 主库,master 从库,slave 主库,操作的时候,记录日志 从库,拿到执行日志,重新执行 ![这里写图片描述][70] 实现原理 1 怼烎@/ 2022年05月15日 04:47/ 0 赞/ 57 阅读
相关 mysql主从复制 [mysql主从复制][mysql] 简介 MySQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够 深藏阁楼爱情的钟/ 2022年04月24日 05:12/ 0 赞/ 81 阅读
相关 MySQL主从复制 1.简介 学习过Redis的同学,应该了解过主从复制的作用。在MySQL集群环境中,可以分为主节点与从节点,通过主从复制可以实现数据备份、故障转移、MySQL集群、高可用 - 日理万妓/ 2022年04月08日 14:28/ 0 赞/ 268 阅读
相关 mysql主从复制 复制如何工作: 1. 主库开启二进制日志,在每次准备提交事务完成数据更新之前,主库将数据更新的事件记录到二进制日志中。 2. 从库将主库的二进制日志复制到本地中继日志 冷不防/ 2022年03月12日 06:46/ 0 赞/ 403 阅读
相关 mysql主从复制 1.复制原理过程 1)主库把数据的更改记录到二进制日志中。 2)备库将主库的二进制日志复制到自己的中继日志中。 3)备库读取中继日志的事件并将其重放到备份数据之上。 爱被打了一巴掌/ 2022年03月11日 12:52/ 0 赞/ 401 阅读
相关 Mysql 主从复制 一、原理及作用 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV 小灰灰/ 2022年02月01日 04:39/ 0 赞/ 458 阅读
相关 Mysql 主从复制 Mysql 主从复制 1.主节点每次将数据库的数据改变记录存储为二进制日志形式持久化。 2.分片节点将主节点中二进制日志数据文件拷贝至自己的中继日志文件中。 3.分 Dear 丶/ 2021年10月09日 09:24/ 0 赞/ 556 阅读
相关 MySQL--主从复制 主从复制 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nL ﹏ヽ暗。殇╰゛Y/ 2021年08月13日 18:58/ 0 赞/ 363 阅读
相关 Mysql主从复制 MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载... 朱雀/ 2020年09月26日 11:38/ 0 赞/ 1304 阅读