关键词搜索

源码搜索 ×
×

企业实战_07_MyCat 搭建Mysql 一主一从复制环境

发布2021-07-10浏览633次

详情内容

接上一篇:企业实战_06_MyCat 常用的分片算法
https://gblfy.blog.csdn.net/article/details/118770261

一、 环境准备
1. 主从复制搭建流程
第1步备份数据库并记录相关事务节点
第2步在源(主机)数据库中,创建主从复制的用户
第3步在新实例上恢复备份的数据库
第4步在新实例上配置复制链路
第5步如果主机上的库名和从机上的库名不一致时,需要建立过滤链路
第6步在新实例上启动复制链路
2. 服务器分布

数据库架构升级为垂直分库,依次搭建mysql主从复制,一主一从、一主二从、一主三从环境

主机名IP地址角色数据库
node1192.168.92.101MYSQL、mycatimooc_db(主机物理)
node2192.168.92.102MYSQLorder_db(从机物理)
node3192.168.92.103MYSQLproduct_db(主机物理)
node4192.168.92.104MYSQLcustomer_db(从机物理)
二、 MySql 主机节点操作如下

声明:提前启动mysql

2.1. 创建数据库
mysql -uroot -p -e"create database imooc_db"
    2.2. 初始化表结构及数据
    • 这里为了演示,找了一个点上项目的表和数据,需要初始化一下
    mysql -uroot -p imooc_db < imooc_db.sql 
    
      2.3. 验证
      # 登录mysql
      mysql -uroot -p
      输入密码:123456
      
      # 查看数据库列表
      show databases;
      
      # 使用imooc_db数据库
      use imooc_db;
      
      # 查看当前imooc_db数据库下的表列表
      show tables;
      
        2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      操作记录

      [root@node1 ~]# mysql -uroot -p
      Enter password: 
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 5
      Server version: 5.7.34 MySQL Community Server (GPL)
      
      Copyright (c) 2000, 2021, Oracle and/or its affiliates.
      
      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.
      
      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      
      mysql> show databases;
      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | imooc_db           |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      5 rows in set (0.01 sec)
      
      mysql> use imooc_db;
      Reading table information for completion of table and column names
      You can turn off this feature to get a quicker startup with -A
      
      Database changed
      mysql> show tables;
      +-----------------------+
      | Tables_in_imooc_db    |
      +-----------------------+
      | customer_balance_log  |
      | customer_inf          |
      | customer_level_inf    |
      | customer_login        |
      | customer_login_log    |
      | customer_point_log    |
      | order_cart            |
      | order_customer_addr   |
      | order_detail          |
      | order_master          |
      | product_brand_info    |
      | product_category      |
      | product_comment       |
      | product_info          |
      | product_pic_info      |
      | product_supplier_info |
      | region_info           |
      | serial                |
      | shipping_info         |
      | warehouse_info        |
      | warehouse_proudct     |
      +-----------------------+
      21 rows in set (0.00 sec)
      
      mysql> exit
      Bye
      [root@node1 ~]#
      
        2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      2.4. 数据备份

      将imooc_db的表、数据、存储过程、触发器、事件备份成一个名称叫bak_imooc.sql的文件中

      mysqldump --master-data=2 --single-transaction --routines --triggers --events -uroot -p imooc_db > bak_imooc.sql
      

        异常解决方案(没遇到就跳过):
        bash: mysqldump: command not found
        mysqldump备份报Binlogging on server not active的解决

        2.5. 脚本同步

        将bak_imooc.sql同步到从机node2节点

        [root@node1 ~]# scp bak_imooc.sql root@192.168.92.102:/root
        
          2.6. 异常解决方案

          mysqldump备份报Binlogging on server not active的解决

          三、node2节点
          3.1. 创建order_db数据库
          # 创建order_db数据库
          mysql -uroot -p -e"create database order_db"
          
            2
          3.2. 将bak_imooc.sql导入到order_db数据库中
          mysql -uroot -p order_db < bak_imooc.sql 
          
            四、mysql主从复制账号创建

            在MySql主机node1节点上,创建mysql 主从复制的账号

            4.1. 登录数据库
             mysql -uroot -p 
             #输入密码:123456
             
            
              2
            • 3
            4.2. 创建主从复制的账号
             create user 'im_repl'@'192.168.92.%' identified by '123456'; 
            
              4.3. 账号授权

              给主从复制的账号赋予操作所有对象的replication slave权限

               grant replication slave on *.* to 'im_repl'@'192.168.92.%'; 
              
                五、 创建复制链路

                在node2节点操作

                5.1. 登陆数据库
                mysql -uroot -p 
                
                  5.2. 查看复制链路帮助
                  \h change master to
                  
                    5.3. 建立复制的链路
                    change master to master_host='192.168.92.101',master_user='im_repl',master_password='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
                    
                      • master_host:主节点的ip
                      • master_user:在主节点创建数据复制同步的用户
                      • master_password:主从复制用户的密码
                      • MASTER_LOG_FILE:同步开始的时间点(开始同步的文件名,开始复制日志的事务点),这个记录在备份同步的文件中
                      [root@node2 ~]# more bak_imooc.sql 
                      
                      # 内容
                      CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
                      
                      
                        2
                      • 3
                      • 4
                      • 5

                      在这里插入图片描述
                      异常解决方案(没遇到则跳过):
                      Slave is not configured or failed to initialize properly. You must at least set --server-id

                      5.4. 查看链路
                      show slave status \G
                      
                        5.5. 截图如下

                        在这里插入图片描述
                        Slave_IO_Running: No 和Slave_SQL_Running: No2个参数的状态,可以看出,主从复制链路已经建立好了,但是没有启动。尚未启动,启动之前需要做哪些准备?

                        六、 常规主从复制和非常规主从复制的区别
                        6.1. 常规主从复制
                        • 主机上的数据库名和从机上的数据库名是一致的。
                        • 举个栗子:
                          主机上的数据库名叫gblfy_db,从机上的数据库名也叫gblfy_db。

                        声明:如果主从数据库名都一致的话,可以直接启动复制链路,跳过设置过滤链路。

                        6.2. 非常规主从复制

                        在垂直拆分中,当主从复制中,主机上的数据库名和从机上的数据库名不一致,从机上的数据库名,按照我们的业务模块名来命名的,应该做哪些操作呢?

                        举个栗子:
                        主机上的数据库名叫imooc_db,从机上的数据库名,根据业务模块来命令的叫order_db。

                        6.3. 解决方案

                        使用change replication filter设置即可,通过过滤链路把数据库名进行映射

                        七、设置过滤链路
                        7.1. 查看change replication filter命令帮助 数据库过滤
                        \h change replication filter
                        
                          7.2. 设置过滤链路 进行数据库名映射
                          # 主从数据库名映射
                           change replication filter replicate_rewrite_db=((imooc_db,order_db));
                          
                            2
                          7.3. 查看链路
                          # 查看链路
                           show slave status \G
                          
                          # 日志显示过滤链路
                          Replicate_Rewrite_DB: (imooc_db,order_db)
                          
                            2
                          • 3
                          • 4
                          • 5

                          注:现在已经建立好了过滤,通过率把数据库名进行了重新命名

                          八、启动复制链路,并监控
                          8.1. 启动复制链路
                          start slave;
                          
                            8.2. 查看链路
                            show slave status \G
                            

                              在这里插入图片描述
                              正常如下图,都是yes才对
                              在这里插入图片描述
                              0)
                              注:如果遇到mysql主从复制之异常解决— Slave_IO_Running: NO,请:
                              mysql主从复制之异常解决— Slave_IO_Running: NO

                              到目前为止,一主一从的复制链路已经创建完成,那如何验证复制链路是否将数据同步到从机上呢?

                              九、主从复制验证
                              9.1. 验证思路
                              案例思路:
                              1. 登录主机上数据库,在主机上新增或者修改一个表的数据,会自动主从复制
                              2. 登录从机上数据库,查看在主机上修改一个表的数据,在从机上是否也被更改
                              3. 如果更改则说明复制链路成功,能正常进行主从复制功能;否则,查看日志,定位异常信息及制定解决方案
                              
                                2
                              • 3
                              • 4
                              9.2. 登录node1节点
                              #登录数据路
                              mysql -uroot -p
                              
                              # 显示当前mysql中的所有数据库
                              show databases;
                              
                              # 使用指定数据库
                              use imooc_db;
                              
                              # 显示当前使用数据库中的所有的表
                              show tables;
                              
                              # 查看region_info 的数据
                              select * from region_info ;
                              注:显示没有数据
                              
                              # 新增一条数据
                              INSERT INTO `region_info` VALUES (1, 0, '中国', 0);
                              
                              # 再次查看region_info 的数据
                              select * from region_info ;
                              
                                2
                              • 3
                              • 4
                              • 5
                              • 6
                              • 7
                              • 8
                              • 9
                              • 10
                              • 11
                              • 12
                              • 13
                              • 14
                              • 15
                              • 16
                              • 17
                              • 18
                              • 19
                              • 20
                              • 21

                              在这里插入图片描述

                              9.3. 登录node2节点
                              #登录数据路
                              mysql -uroot -p
                              
                              # 显示当前mysql中的所有数据库
                              show databases;
                              
                              # 使用指定数据库
                              use order_db;
                              
                              # 显示当前使用数据库中的所有的表
                              show tables;
                              
                              # 查看region_info 的数据
                              select * from region_info ;
                              
                                2
                              • 3
                              • 4
                              • 5
                              • 6
                              • 7
                              • 8
                              • 9
                              • 10
                              • 11
                              • 12
                              • 13
                              • 14

                              在这里插入图片描述

                              从上面截图可以看出,在node1节点的imooc_db的region_info表中添加的一条数据,node2节点的order_db的region_info表中也同步了这条数据,目前,一主一从的mysql环境搭建完成。

                              下一篇:企业实战_08_MyCat 搭建Mysql 一主二从复制环境
                              https://gblfy.blog.csdn.net/article/details/118651265

                              相关技术文章

                              点击QQ咨询
                              开通会员
                              返回顶部
                              ×
                              微信扫码支付
                              微信扫码支付
                              确定支付下载
                              请使用微信描二维码支付
                              ×

                              提示信息

                              ×

                              选择支付方式

                              • 微信支付
                              • 支付宝付款
                              确定支付下载