TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 数据库
  3. 正文

MySQL的主从复制

2023年11月16日 790点热度 0人点赞 0条评论

3.1.2)实现主从复制配置

  • 主节点配置:

    1. 启用二进制日志

      [mysqld]
      log_bin
    2. 为当前节点设置一个全局惟一的ID号

      [mysqld]
      log_bin
      server-id=#          #为当前节点设置一个全局惟的ID号
      log-basename=master  #可选项,设置datadir中日志名称,确保不依赖主机名

      说明:

      server-id的取值范围
      1 to 4294967295 (>= MariaDB 10.2.2),默认值为1
      0 to 4294967295 (<= MariaDB 10.2.1),默认值为0,如果从节点为0,所有master都将拒绝此slave的连接
    3. 创建有复制权限的用户账号

      GRANT REPLICATION SLAVE  ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';
    4. 查看从二进制日志的文件和位置开始进行复制

      SHOW MASTER LOGS;
  • 从节点配置:

    1. 启动中继日志

      [mysqld]
      server_id=#                      #为当前节点设置一个全局惟的ID号
      log-bin
      read_only=ON                     #设置数据库只读,针对supper user无效
      relay_log=relay-log              #relay log的文件路径,默认值hostname-relay-bin
      relay_log_index=relay-log.index  #默认值hostname-relay-bin.index
    2. 使用有复制权限的用户账号连接至主服务器,并启动复制线程

      CHANGE MASTER TO MASTER_HOST='masterhost',
      MASTER_USER='repluser',
      MASTER_PASSWORD='replpass',
      MASTER_LOG_FILE='mariadb-bin.xxxxxx',
      MASTER_LOG_POS=#;
      ​
      START SLAVE [IO_THREAD|SQL_THREAD];
      SHOW SLAVE STATUS;
  • 范例:新建主从复制

    "保证两个数据库版本一致"
    `修改主节点配置文件`
    [root@db02 ~]# cat /etc/my.cnf.d/server.cnf |grep -A 4 '\[mysqld\]'
    [mysqld]
    server-id=1
    log-basename=master
    log_bin=mariadb-bin
    binlog_format=ROW
    innodb_flush_log_at_trx_commit=2 #优化数据库速度,建议加可以不加
    `重启主节点数据库`
    [root@db02 ~]# systemctl restart mariadb.service 
    `准备主节点复制授权账号`
    MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.139.%' identified by 'stangj';
    `查看记录点`
    MariaDB [(none)]> show master logs;
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 |       245 |
    +--------------------+-----------+
    1 row in set (0.00 sec)
    `对主节点元数据进行备份`
    [root@db02 ~]# mysqldump -uroot -proot -F -A --single-transaction --master-data=1 --default-character-set=utf8 > /backup/all.sql
    ​
    `拷贝源数据到重节点`
    [root@db02 ~]# scp /backup/all.sql 192.168.139.204:/root/
    `从节点安装数据库`
    [root@slaves ~]# yum -y install mariadb mariadb-server
    `修改从节点配置文件`
    [root@slaves ~]# grep -A 5 '\[mysqld\]' /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id=2
    log-bin=mariadb-bin                 #建议加可以不加
    read_only=ON                        #建议加可以不加
    relay_log=relay-log                 #建议加可以不加
    relay_log_index=relay-log.index     #建议加可以不加
    innodb_flush_log_at_trx_commit=2    #优化数据库速度,建议加可以不加
    `从节点启动服务器`
    [root@slaves ~]# systemctl restart mariadb.service 
    `准备复制工作`
    #查找到下面信息然后在发过来的all.sql里面进行修改
    MariaDB [(none)]> help change master to;
    CHANGE MASTER TO
      MASTER_HOST='master2.mycompany.com',
      MASTER_USER='replication',
      MASTER_PASSWORD='bigs3cret',
      MASTER_PORT=3306,
      MASTER_LOG_FILE='master2-bin.001',
      MASTER_LOG_POS=4,
      MASTER_CONNECT_RETRY=10;
    `修改添加如下内容`
    [root@slaves ~]# grep -C 3 "MASTER_PASSWORD='stangj'" /root/all.sql
    CHANGE MASTER TO 
      MASTER_HOST='192.168.139.31',
      MASTER_USER='repluser',
      MASTER_PASSWORD='stangj',
      MASTER_PORT=3306,
    MASTER_LOG_FILE='mariadb-bin.000003', MASTER_LOG_POS=245;
    `在从节点上还原数据`
    [root@slaves ~]# mysql < /root/all.sql 
    `查看验证相关信息`
    MariaDB [(none)]> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: 
                      Master_Host: 192.168.139.31
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mariadb-bin.000003
              Read_Master_Log_Pos: 245
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: mariadb-bin.000003
                 Slave_IO_Running: No
                Slave_SQL_Running: No
    ..............................
    `启动io thread和sql thread线程`
    MariaDB [(none)]> start slave;
    `再次查看状态`
    MariaDB [(none)]> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.139.31
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mariadb-bin.000003
              Read_Master_Log_Pos: 403
                   Relay_Log_File: relay-log.000002
                    Relay_Log_Pos: 689
            Relay_Master_Log_File: mariadb-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ........................
    `查看线程`
    MariaDB [(none)]> show processlist;
    `验证`
    #repluser以及同步过来了
    MariaDB [(none)]> select user,host from mysql.user;
    +----------+---------------+
    | user     | host          |
    +----------+---------------+
    | root     | 127.0.0.1     |
    | repluser | 192.168.139.% |
    | root     | ::1           |
    |          | db02          |
    | root     | db02          |
    |          | localhost     |
    | root     | localhost     |
    +----------+---------------+
    • 范例:当master服务器宕机,提升一个slave成为新的master

    #找到哪个从节点的数据库是最新,让它成为新master
    [root@centos8 ~]#cat /var/lib/mysql/relay-log.info
    5
    ./mariadb-relay-bin.000002
    1180
    mysql-bin.000002
    996
    0
    #新master修改配置文件,关闭read-only配置
    [root@slave1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
    [mysqld]
    server-id=18
    read-only=OFF
    log-bin=/data/mysql/logbin/mysql-bin 
    #清除旧的master复制信息
    MariaDB [hellodb]>set global read_only=off;
    MariaDB [hellodb]>stop slave;
    MariaDB [hellodb]>reset slave all;
    #在新master上完全备份
    [root@slave1 ~]#mysqldump -A --single-transaction --master-data=1 -F > backup.sql
    [root@slave1 ~]#scp backup.sql 10.0.0.28:
    MariaDB [(none)]> show master logs;
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000002 |       371 |
    +--------------------+-----------+
    #分析旧的master 的二进制日志,将未同步到至新master的二进制日志导出来,恢复到新master,尽可能恢复数据
    #其它所有 slave 重新还原数据库,指向新的master
    [root@slave2 ~]#vim backup.sql
    CHANGE MASTER TO
    MASTER_HOST='10.0.0.18',
     MASTER_USER='repluser',
      MASTER_PASSWORD='centos',
       MASTER_PORT=3306,
    MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=371;
    MariaDB [hellodb]>stop slave;
    MariaDB [hellodb]>reset slave all;
    MariaDB [hellodb]>set sql_log_bin=off;
    MariaDB [hellodb]>source backup.sql;
    MariaDB [hellodb]>set sql_log_bin=on;
    MariaDB [hellodb]>start slave;

3.1.3)主从复制相关

  • 限制从服务器为只读

    read_only=ON
    #注意:此限制对拥有SUPER权限的用户均无效
标签: 暂无
最后更新:2023年11月16日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号