【linux下mysql主从复制操作流程】

linux下mysql主从复制操作流程

在Linux下实现MySQL主从复制(Master-Slave Replication)是一个常见的需求,用于读写分离、数据备份等场景。以下是一个详细的操作流程,包括每个步骤、注意事项以及总结。

一、准备环境

  1. 安装MySQL

    • 确保主服务器(Master)和从服务器(Slave)都已经安装了MySQL。
    • 可以通过包管理工具安装,例如:sudo apt-get install mysql-server(Debian/Ubuntu)或sudo yum install mysql-server(CentOS/RHEL)。
  2. 配置网络连通性

    • 确保主服务器和从服务器之间可以通过网络相互通信。

二、配置主服务器(Master)

  1. 编辑MySQL配置文件

    • 打开MySQL配置文件(通常是/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf)。

    • 添加或修改以下内容:

      ini 复制代码
      [mysqld]
      server-id = 1
      log-bin = mysql-bin
      binlog-do-db = your_database  # 仅复制特定的数据库,可选
    • server-id:每个服务器的唯一标识符,主服务器和从服务器不能相同。

    • log-bin:启用二进制日志。

    • binlog-do-db:仅复制特定的数据库,如果希望复制所有数据库,可以省略此行。

  2. 重启MySQL服务

    • 重启MySQL服务以使配置生效:

      sh 复制代码
      sudo systemctl restart mysql
  3. 创建复制用户

    • 登录到MySQL:

      sh 复制代码
      mysql -u root -p
    • 创建一个用于复制的用户,并授予必要的权限:

      sql 复制代码
      CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
      FLUSH PRIVILEGES;
  4. 锁定表并获取二进制日志位置

    • 为了确保数据一致性,锁定表并获取当前二进制日志文件名和位置:

      sql 复制代码
      FLUSH TABLES WITH READ LOCK;
      SHOW MASTER STATUS;
    • 记录下FilePosition的值,稍后从服务器上会用到。

  5. 备份数据库

    • 使用mysqldump备份数据库,并传输到从服务器:

      sh 复制代码
      mysqldump -u root -p --all-databases --master-data=2 > all_databases.sql
    • 将生成的all_databases.sql文件复制到从服务器。

  6. 解锁表

    • 在主服务器上解锁表:

      sql 复制代码
      UNLOCK TABLES;

三、配置从服务器(Slave)

  1. 编辑MySQL配置文件

    • 打开MySQL配置文件(路径同上)。

    • 添加或修改以下内容:

      ini 复制代码
      [mysqld]
      server-id = 2
      relay-log = mysql-relay-bin
    • server-id:确保与主服务器不同。

    • relay-log:定义中继日志文件名。

  2. 重启MySQL服务

    • 重启MySQL服务以使配置生效:

      sh 复制代码
      sudo systemctl restart mysql
  3. 导入主服务器的备份

    • 将之前在主服务器上生成的all_databases.sql文件导入到从服务器:

      sh 复制代码
      mysql -u root -p < all_databases.sql
  4. 配置从服务器以连接到主服务器

    • 登录到从服务器的MySQL:

      sh 复制代码
      mysql -u root -p
    • 配置从服务器:

      sql 复制代码
      CHANGE MASTER TO
        MASTER_HOST='master_server_ip',
        MASTER_USER='replica_user',
        MASTER_PASSWORD='replica_password',
        MASTER_LOG_FILE='mysql-bin.000001',  # 使用SHOW MASTER STATUS得到的File值
        MASTER_LOG_POS= 12345;  # 使用SHOW MASTER STATUS得到的Position值
  5. 启动复制

    • 在从服务器上启动复制进程:

      sql 复制代码
      START SLAVE;
  6. 检查复制状态

    • 检查从服务器状态:

      sql 复制代码
      SHOW SLAVE STATUS \G;
    • 确保Slave_IO_RunningSlave_SQL_Running都为Yes,并且没有错误。

四、注意事项

  1. 防火墙和网络

    • 确保MySQL端口(默认3306)在主服务器和从服务器之间开放。
  2. 数据一致性

    • 在主服务器上进行备份和获取二进制日志位置时,确保没有写入操作,或者选择适当的备份策略(如使用Percona XtraBackup等工具)。
  3. 权限和安全性

    • 复制用户应仅授予必要的权限,并且密码应足够复杂。
    • 使用SSL加密复制连接以增加安全性。
  4. 监控和故障排查

    • 定期监控复制状态,及时发现并解决问题。
    • 使用工具如pt-table-checksumpt-table-sync来检查和修复数据不一致。

五、总结

MySQL主从复制是一个强大且灵活的功能,可以显著提高数据库的可用性和可扩展性。通过遵循上述步骤,您可以轻松地在Linux下实现MySQL的主从复制。重要的是,要仔细规划配置,确保网络连通性和安全性,以及定期监控复制状态以维护数据一致性。

相关推荐
deeper_wind6 小时前
k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)
linux·运维·容器·kubernetes
余衫马6 小时前
Mysql 5.7 与 SqlSugar 5.X 整合开发实战
mysql·c#·orm·sqlsugar
勇往直前plus6 小时前
VMware centos磁盘容量扩容教程
linux·运维·centos
政安晨7 小时前
Ubuntu 服务器无法 ping 通网站域名的问题解决备忘 ——通常与网络配置有关(DNS解析)
linux·运维·服务器·ubuntu·ping·esp32编译服务器·dns域名解析
北极糊的狐9 小时前
MySQL常见报错分析及解决方案总结(1)---Can‘t connect to MySQL server on ‘localhost‘(10061)
数据库·mysql
路溪非溪9 小时前
嵌入式Linux驱动开发杂项总结
linux·运维·驱动开发
Neolock9 小时前
Linux应急响应一般思路(三)
linux·web安全·应急响应
被遗忘的旋律.10 小时前
Linux驱动开发笔记(七)——并发与竞争(上)——原子操作
linux·驱动开发·笔记
轻松Ai享生活10 小时前
minidump vs core dump
linux
轻松Ai享生活11 小时前
详细的 Linux 常用文件系统介绍
linux