从 MySQL 到 SequoiaDB 的 Binlog Replication

2022-03-22 00:00:00 数据 数据库 安装 复制 主从
巨杉数据库 SequoiaDB 是开源分布式数据库,由 SQL 层和存储引擎层构成,SQL 层是指 Sequoiasql-mysql,通俗理解为 SequoiaDB 的 MySQL 实例层,并且 SequoiaDB 完全兼容 MySQL,用户线上使用的 MySQL 与 SequoiaDB 可以通过 Binlog Replication 建立同步复制。
本文介绍如何在 MySQL 与 SequoiaDB 之间建立主从复制,如下图所示:


环境介绍

操作步骤

1.Ubuntu18.04 安装 MySQL 5.7


Ubuntu18 下安装 MySQL 模拟用户在线使用的 MySQL,本文中可设定为主库。

下载 MySQL 的 APT 存储库:https://dev.mysql.com/downloads/repo/apt/

    sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
    sudo apt-get update

    安装 MySQL,可设置 root 对应的密码为:sequoiadb

      sudo apt-get install mysql-server

      修改配置文件

        #vi etc/mysql/mysql.conf.d/mysqld.cnf
        [mysqld]
        port=3308
        log-bin=master-bin #启动二进制日志;
        server-id=1 #为当前节点设置一个全局的ID号
        #bind-address=127.0.0.1 #注释掉

        MySQL 登陆指令如下

          #mysql -u root -P3308 -psequoiadb


          2.安装巨杉数据库 Ubuntu18下安装 SequoiaDB单机集群环境,设定从库


          安装巨杉数据库 SequoiaDB 单机集群,请参考官网快速入门(http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1519612914-edition_id-0)

            tar zxvf sequoiadb-3.2.3-linux_x86_64.tar.gz
            cd sequoiadb-3.2.3

            安装 SequoiaDB 和 Sequoiasql-mysql

              ./setup.sh

              切换到 sdbadmin 部署单机集群,三个数据组,每个数据组单副本,加一个MySQL实例

                cd opt/sequoiadb
                ./tools/deploy/quickDeploy.sh

                修改 sequoiasql-mysql 配置文件内容,开启中继日志以设置全局ID号

                  #vi opt/sequoiasql/mysql/database/3306/auto.cnf
                  [myslqd]
                  server-id=3 #当前节点全局ID号
                  relay_log=relay-log
                  relay_log_index=relay-log.index

                  重启 sequoiasql-mysql 实例

                    service sequoiasql-mysql restart

                    可以查看 sequoiasql-mysql 状态, running 为正在运行状态

                      # service sequoiasql-mysql status
                      sequoiasql-mysql.service - SequoiaSQL-MySQL Server
                      Active: active (running) since Tue 2019-08-06 08:50:16 UTC; 1h 20min ago
                      .....

                      执行如下指令登陆 sequoiadb 的 mysql 实例

                        #/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root


                        3.从 MySQL 导出数据,导入到 SeuqoiaDB 数据库 


                        通过 mysqldump 导出数据库 news 的数据,导出文件为 news.sql.

                          # mysqldump -h 127.0.0.1 -psequoiadb -P 3308 -u root -B news > news.sql

                          SequoiaDB 导入数据

                            mysql> source news.sql;


                            4.配置 Binlog Replication 主从 


                            在主库上查看主库 binlog 日志文件位置

                              mysql> show master status\G
                              *************************** 1. row ***************************
                              File: master-bin.000002
                              Position: 154
                              Binlog_Do_DB:
                              Binlog_Ignore_DB:
                              Executed_Gtid_Set:
                              1 row in set (0.00 sec)

                              在主库上授权复制用户

                                mysql> grant replication slave,replication client on *.* to 'repl'@'127.0.0.1' identified by 'sequoiadb';
                                mysql> flush privileges;

                                配置主从,使用有复制权限的用户账号连接主库,启动复制线程

                                  reset slave;
                                  change master to
                                  master_host='127.0.0.1',
                                  master_user='repl',
                                  master_password='sequoiadb',
                                  master_port=3308,
                                  master_log_file='master-bin.000002',
                                  master_log_pos=154;
                                  start slave;

                                  查看从库状态

                                    mysql> show slave status\G
                                    ************************** 1. row ***************************
                                    Slave_IO_State: Waiting for master to send event
                                    Master_Host: 127.0.0.1
                                    Master_User: repl
                                    Master_Port: 3308
                                    Connect_Retry: 60
                                    Master_Log_File: master-bin.000002
                                    Read_Master_Log_Pos: 154
                                    Relay_Log_File: relay-log.000002
                                    Relay_Log_Pos: 321
                                    Relay_Master_Log_File: master-bin.000002
                                    Slave_IO_Running: Yes
                                    Slave_SQL_Running: Yes
                                    .......
                                    Replicate_Rewrite_DB:
                                    Channel_Name:
                                    Master_TLS_Version:
                                    1 row in set (0.00 sec)


                                    5.验证主从同步状态


                                    在 MySQL 主库执行插入数据

                                      mysql> insert into `news`.`user_info`(id,unickname)values(122,'sequoaidb');
                                      mysql> select * from `news`.`user_info` order by id desc limit 1;
                                      +------+-----------+
                                      | id | unickname |
                                      +------+-----------+
                                      | 122  | sequoaidb |
                                      +------+-----------+
                                      1 row in set (.00 sec)

                                      在 SequoiaDB 从库可以查看到

                                        mysql> select * from `news`.`user_info` order by id desc limit 1;
                                        +------+-----------+
                                        | id   | unickname |
                                        +------+-----------+
                                        | 122  | sequoaidb |
                                        +------+-----------+
                                        1 row in set (.01 sec)


                                        从传统 MySQL 到 Sequoiasql 之间可以通过Binlog Replication建立 binlog 同步复制。若后续从 MySQL 切换到 SequoiaDB,想要继续保留 SequoiaDB 与 MySQL 之间的主从同步,可以继续通过上述 Binlog Replication 进行复制保持数据同步。

                                        相关文章