云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

MariaDB主从复制


1. 环境

⾸先准备两台纯新的 CentOS7.6 服务器,其中 主机名为 master 的主服务器地址为 192.168.99.100 , 主机名为 slave-1 的从服务器地址为 192.168.99.10

master主节点192.168.99.100
slave从节点192.168.99.10

master主服务器与slave从服务器使用yum安装MariaDB,关闭防火墙,关闭selinux,设置时间同步

2.配置master主节点

shell> vi /etc/my.cnf.d/server.cnf
# 启用二进制
log_bin
# 为当前节点设置一个全局唯一ID号
server_id=1
# 可选项,设置datadir中日志名称,确保不依赖主机名
log-basename = master1

2.1 检测

# 启动数据库
shell> systemctl restart mysqld
# 查看数据库接口是否启动
shell> ss -ntl
State      Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
LISTEN     0      128                       *:22                                    *:*                  
LISTEN     0      100               127.0.0.1:25                                    *:*                  
LISTEN     0      80                       :::3306                                 :::*                  
LISTEN     0      128                      :::22                                   :::*                  
LISTEN     0      100                     ::1:25                                   :::*

2.2 创建有复制权限的mysql用户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.99.%' IDENTIFIED BY '123456';

2.3 查看二进制日志文件列表,及大小

mysql> show master logs
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| master1-bin.000001 |       533 |
+--------------------+-----------+

3.slave从节点配置

shell> vim /etc/my.cnf.d/server.cnf
[mysqld]
server_id = 2
# 设置数据库只读
read_only = ON

3.1 启动

shell> systemctl restart mysqld

3.2 配置复制线程

# 使用有复制权限的用户账号连接至主服务器,并启动复制线程
mysql> CHANGE MASTER TO
  MASTER_HOST='192.168.99.100',
  MASTER_USER='repluser',
  MASTER_PASSWORD='123456',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master1-bin.000001',
  MASTER_LOG_POS=533;

3.3 启动复制线程

mysql> start slave;

3.4 查看复制进程是否成功

shell> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.99.100
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master1-bin.000001
          Read_Master_Log_Pos: 533
               Relay_Log_File: slave-1-relay-bin.000002
                Relay_Log_Pos: 557
        Relay_Master_Log_File: master1-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

当Slave_IO_Running 和 Slave_SQL_Running 为yes时表示mysql主从复制成功

4.取消slave主从复制

# 先停止slave
mysql> stop slave;
# 清除所有从服务器上设置的主服务器同步信息
mysql> RESET SLAVE ALL;

5.MySQL复制注意事项

1.限制从服务器为只读

在从服务器上设置read_only=ON

    注意:此限制对拥有SUPER权限的用户均无效

阻止所有用户, 包括主服务器复制的更新

mysql> FLUSH TABLES WITH READ LOCK;

2.RESET SLAVE :从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log

RESET SLAVE ALL:清除所有从服务器上设置的主服务器同步信息,如PORT, HOST, USER和 PASSWORD 等

注意:以上都需要先STOP SLAVE

3.sql_slave_skip_counter = N 从服务器忽略几个主服务器的复制事件,global变量

4.如何保证主从复制的事务安全

参看https://mariadb.com/kb/en/library/server-system-variables/

在master节点启用参数:

sync_binlog=1 每次写后立即同步二进制日志到磁盘,性能差

如果用到的为InnoDB存储引擎:

    innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘

    innodb_support_xa=ON 默认值,分布式事务MariaDB10.3.0废除

    sync_master_info=# #次事件后master.info同步到磁盘

在slave节点启用服务器选项:

    skip-slave-start=ON 不自动启动slave

在slave节点启用参数:

    sync_relay_log=# #次写后同步relay log到磁盘

    sync_relay_log_info=# #次事务后同步relay-log.info到磁盘
  • 分享:
评论
还没有评论
    发表评论 说点什么