ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL 数据库主从同步配置

2020-08-04 23:04:25  阅读:303  来源: 互联网

标签:slave NAME 数据库 192.168 user MySQL 2.110 主从


一、概述

    模式:

    主从复制,主库写入数据,从库同步主库数据,从库保持与主库内容一致,达到实施备份的效果。

    优势:

  • 数据分布(data distribution)
  • 负载平衡(load balancing),实现读写分离,缓解数据库压力。
  • 数据备份(backup)
  • 高可用性与容错行(high availability and failover)

    原理图如下:

    功能:

  • BinLog:二进制文件,存储MasterDB(主数据库)中修改数据的内容,存储内容的格式有Statement,Row,Mixed。
  • Relay Log:功能作用与Binlog一样,不同点在于当日志内的内容被读取完后,会被删除。
  • Binlog dump:将读取Binlog后发送数据给IO线程。
  • IO线程:将接收到数据传给RelayLog日志。
  • SQL线程:读取RelayLog数据。

    流程:

  1. 从库,配置主库信息,建立连接。
  2. MasterDB数据库数据发生变化时,会记录在Binlog日志中。
  3. Binlog dump线程读取Binlog中的内容,将数据发送给IO线程。
  4. IO线程再将数据存入RelayLog中。
  5. SQL线程读取RelayLog中的数据并写入从库。

二、安装和配置

2.1 环境说明

    提示:主从库的数据库版本最好保持一致,或者,从库的版本一定要高于主库版本,否则在数据同步过程中可能会出现问题,切记。

    这里使用测试环境来记录。

    Master(主数据库)环境:

  • 机器:物理机
  • 网络:固定IP
  • 系统:Windows 7
  • IP:192.168.2.166
  • 子网掩码:255.255.255.0
  • 默认网关:192.168.2.1
  • DNS1:202.100.199.8
  • DNS2:202.100.192.68
  • 数据库版本:MySQL 5.7.19

    Slave(从数据库)环境:

  • 机器:从宿主机器建立Esxi环境,在Esxi下建立Centos系统。
  • 网络:1.Esxi 网络桥接 2.Centos 网络桥接
  • 系统:虚拟机 Linux Centos 7
  • IP:192.168.2.110
  • 子网掩码:255.255.255.0
  • 默认网关:192.168.2.1
  • DNS1:202.100.199.8
  • DNS2:202.100.192.68
  • 数据库版本:MySQL 5.7.30

    环境测试:

    要求:IP互通,端口互通

    Windows:

  • ping 192.168.2.110
  • telnet 192.168.2.110 3306

    Centos:

  • ping 192.168.2.166
  • telnet 192.168.2.166 3306 或 wget 192.168.2.166:3306 或 curl 192.168.2.166 3306

2.2 配置主数据库(Master)

    1.修改【主数据库】配置文件,Windows 下默认配置文件(my.ini)路径可以通过服务里面查询。

    2.修改my.ini配置文件,找到以下2行代码取消注释并修改。

  • Master(主数据库)192.168.2.166
[mysqld]

# 启用二进制日志,可指定指定路径和名称
log-bin=mysql-bin

# 服务唯一ID,默认是1,一般取IP最后一段,如IP:192.168.2.166
server-id=166

    3.重启数据库服务。

    4.进入到主数据库中,创建从数据库的操作用户账号和权限。

# 1.登录
mysql -uroot -p

# 2.创建用户并授权 REPLICATION SLAVE ,用户:backup-user,密码:backup-user,授权IP:192.168.2.110(从数据库IP)
grant replication slave on *.* to 'backup_user'@'192.168.2.110' identified by 'backup_user';

# 3.刷新权限
flush privileges;

# 4.查询用户表
select user,host from mysql.user;

    5.清除日志索引文件,用于第1次搭建主从环境。

reset master;

    6.查询 master 状态。

show master status\G;
  • File:mysql-bin.000001
  • Position:154

2.3 配置从数据库(Slave)

    1.修改my.ini配置文件(Linux下,执行 vim /etc/my.cnf),添加以下2行代码。

  • Slave(从数据库)192.168.2.110
[mysqld]

# 启用二进制日志,可指定指定路径和名称
log-bin=mysql-bin

# 服务唯一ID,默认是1,一般取IP最后一段,如IP:192.168.2.110
server-id=110

# 复制进程不随MySQL启动而启动,设置后重启数据库后需要手动启动复制进程,即start slave
skip-slave-start=on

# 同步的数据库名称
replicate_wild_do_table=test_db.*

    3.重启数据库服务。(systemctl restart mysqld.service)

    4.修改从数据库的master链接配置。

  • MASTER_HOST='192.168.2.166' # 连接主机地址
  • MASTER_USER='backup_user' # 连接主机账号
  • MASTER_PASSWORD='backup_user' # 连接主机账号密码
  • MASTER_LOG_FILE='mysql-bin.000001' # 日志文件-通过查询主数据库master状态取得
  • MASTER_LOG_POS=154 # 日志文件起始位置-通过查询主数据库master状态取得
# 1.修改master信息
CHANGE MASTER TO MASTER_HOST='192.168.2.166',MASTER_USER='backup_user',MASTER_PASSWORD='backup_user',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

# 2.开启
start slave;

# 3.查询状态
show slave status\G;

    以下两行代码都显示yes代表已经配置成功。

  • Slave_IO_Running:Yes
  • Slave_SQL_Running:Yes

2.4 同步数据库

    1.如没有旧的数据库需要同步,则可以直接使用。如主数据库上,有旧的数据库需要同步,则要进行锁表操作,防止对数据库进行读写改变日志索引文件的位置值,将主数据库上的数据库导入从数据库后再进行解锁。

flush tables with read lock;

    2.将需要同步的数据库导出(可使用mysql命令或其他工具均可,如:Navicat等)。

    3.导入从数据库后,在主数据库上,进行解锁操作。

unlock tables;

    4.这里直接使用Navicat将表同步过去。

三、测试

    注意:启动从数据库同步命令以前建立的数据库是不会同步的,如需要同步旧的数据库,看2.4步骤,这里直接使用新增表操作来演示。

  1. 在主数据库上(192.168.2.166),新建 Article 表。
  2. 刷新从数据库(192.168.2.110),可以看到从数据库已经同步了。

 

四、要点说明和场景应用(其它)

4.1 从库解除主从关系

    场景:从库解除主从关系,提升从库为主库进行使用或重置主从关系和日志文件。

    1.在从库数据库命令行中,先停止主从关系进程。

stop slave

    2.再使用以下命令,清除主从复制关系的位置信息。该语句将被用于干净的启动,它删除 master.info 文件和 relay-log.info 文件以及所有的 relay log 文件并重新启用一个新的 relaylog 文件。

reset slave

    3.查询状态

show slave status\G;

    4.修改 my.cnf 删除主从相关配置参数。

4.2 skip-slave-start 使从数据库复制进程不随从数据库启动而启动

    场景:从数据库重启时,确保手动启动从数据库复制进程是正常的,我们一般在从数据库配置文件中加入 skip-slave-start=on 参数配置,查询相关配置是否正确(主数据库 show master status\G; 的 File 和 Position 值正确为前提),再手动去启动复制进程 start slave。

4.3 指定同步数据库

    第1种,在主数据库中进行 grant 用户授权时,限定用户可操作的数据库。

# 统一格式
grant 权限1,权限2,... on 数据库名称.表名称 to '用户名'@'授权地址' identified by '用户密码';

# 栗子:创建并授权本地 root用户 全部数据库 全部权限
grant all privileges on *.* to 'root'@'localhost' identified by 'root';

# 栗子:创建并授权192.168.2.110地址 test_user用户 test_db数据库 select,insert权限
grant select,insert on test_db.* to 'test_user'@'192.168.2.110' identified by 'test_user';

# 栗子:创建并授权192.168.2.110地址 test_user用户 test_db数据库 user数据表 select,insert权限
grant select,insert on test_db.user to 'test_user'@'192.168.2.110' identified by 'test_user';

# 栗子:创建并授权192.168.2.110地址 backup_user用户 test_db数据库 replication slave权限
grant replication slave on test_db.* to 'backup_user'@'192.168.2.110' identified by 'backup_user';

    第2种,在主数据库配置文件中(my.ini、my.cnf),设置以下规则参数,从数据库中不做限制。

  • 不建议使用:binlog_do_db=DB_NAME(需要同步的数据库,1.如需同步全部数据库,则不需要设置;2.多个数据库,用逗号分开)
  • 不建议使用:binlog_ignore_db=DB_NAME(需要忽略的数据库,搭配使用)

    第3种,在从数据库配置文件中(my.ini、my.cnf),设置以下规则参数,主数据库中不做限制。

  • 不建议使用:replicate_do_db=DB_NAME(需要同步的数据库,1.如需同步全部数据库,则不需要设置;2.多个数据库,用逗号分开)
  • 不建议使用:replicate_ignore_db=DB_NAME(需要忽略的数据库,搭配使用)
  • 不建议使用:replicate_do_table=DB_NAME.TABLE_NAME(需要同步的数据表,1.如需同步全部数据表,则不需要设置;2.多个数据表,用逗号分开)
  • 不建议使用:replicate_igore_table=DB_NAME.TABLE_NAME(需要忽略的数据表,搭配使用)
  • 建议使用:replicate_wild_do_table=DB_NAME.TABLE_NAME(可解决跨库问题,需要同步的数据表,全部:DB_NAME.%)
  • 建议使用:replicate_wild_ignore_table=DB_NAME.TABLE_NAME(可解决跨库问题,需要忽略的数据表,全部:DB_NAME.%)

五、参考文章

  • https://blog.csdn.net/Yoga0301/article/details/80545914?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare
  • https://blog.csdn.net/kjsayn/article/details/51350691?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.compare
  • https://blog.csdn.net/donghaixiaolongwang/article/details/78591012
  • 三亚在哪个省哪个城市呢

 

 

标签:slave,NAME,数据库,192.168,user,MySQL,2.110,主从
来源: https://www.cnblogs.com/1994jinnan/p/13436858.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有