博客
关于我
MySQL5.7.18主从复制搭建(一主一从)
阅读量:790 次
发布时间:2023-02-11

本文共 4244 字,大约阅读时间需要 14 分钟。

MySQL 5.7.18 主从复制搭建(一主一从)

一、复制原理

MySQL 的主从复制机制通过二进制日志实现数据同步。主服务器将更新写入二进制日志文件,并通过索引跟踪日志循环。这些日志记录发送到从服务器的更新。当从服务器连接到主服务器时,它通知主服务器从哪里开始读取日志。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

MySQL 使用三个线程执行复制功能:一个在主服务器上,另两个在从服务器上。当执行 START SLAVE 时,从服务器创建一个 I/O 线程,用于连接主服务器并接收二进制日志内容。主服务器创建一个线程,将二进制日志内容发送到从服务器。从服务器的 I/O 线程读取这些内容并拷贝到本地文件(中继日志)中。第三个线程是 SQL 线程,用于读取中继日志并执行其中的更新。


二、服务器准备

操作系统版本

Red Hat Enterprise Linux Server release 6.7 (Santiago)

服务器信息

  • 主服务器 (mysql2)

    IP: 172.16.115.245
    主机名称: mysql2
    server_id: 245

  • 从服务器 (mysql3)

    IP: 172.16.115.247
    主机名称: mysql3
    server_id: 247

安装情况

主从服务器均已安装 MySQL 5.7.18。


三、主从复制实施细节

1. 主服务器配置

  • 为主服务器创建一个连接账户并授予 REPLICATION SLAVE 权限:

    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl@20170509';
  • 修改主服务器的 my.cnf 配置文件:

    server-id = 245log_bin = /data/mysqllog/3306/bin_log/binlog

    确保以上值设置完成后重启 MySQL。

  • 备份主服务器上的完整数据:

    mysqldump -uroot -p'密码' --master-data=2 --single-transaction -R --triggers -A > /backup/all.sql

    说明:

    • --master-data=2 记录主库的 Binlog 位置和 Position。
    • --single-transaction 获取一致性快照。
    • -R 备份存储过程和函数。
    • -A 备份所有数据库。
  • 查看主库备份时的 Binlog 名称和位置:

    SHOW MASTER STATUS;

    或者查看备份文件:

    vi all.sql
  • 2. 从服务器配置

  • 修改从服务器的 my.cnf 配置文件:

    server-id = 247log_bin = /data/mysql/logdir/3306/binloginnodb_file_per_table = ONskip_name_resolve = ONrelay_log = /data/mysql/logdir/3306/relay_log/relay.logbinlog-format = rowlog-slave-updates = trueread_only = ON

    设置完成后重启 MySQL。

  • 在从服务器上恢复主库备份:

    mysql -uroot -p'密码' < all.sql
  • 停止从库并配置主从参数,启动从库:

    mysql > stop slave;mysql > CHANGE MASTER TO   MASTER_HOST='172.16.115.245',  MASTER_USER='repl',  MASTER_PASSWORD='repl@20170509',  MASTER_LOG_FILE='binlog.000004',  MASTER_LOG_POS=154;mysql > start slave;
  • 3. 验证配置

  • 查看主从进程:

    SHOW PROCESSLIST \G
  • 查看从库状态:

    SHOW SLAVE STATUS \G

    期望结果:

    • Slave_IO_State: Waiting for master to send event
    • Slave_SQL_Running: Yes

  • 四、完整安装步骤

    1. MySQL 安装

  • 下载并解压:

    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gztar xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/cd /usr/local/ln -sv mysql-5.7.18-linux-glibc2.5-x86_64/ mysql
  • 新建用户组和用户:

    groupadd mysqluseradd -g mysql -r -s /sbin/nologin -M -d /data/mysqldata mysql
  • 分配目录权限:

    chown -R mysql:mysql /usr/local/mysqlmkdir -p /data/mysqldatachmod -R 770 /data/mysqldatachown -R mysql:mysql /data/mysqldata
  • 初始化 MySQL:

    cd /usr/local/mysql./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata --initialize
  • 记录初始化密码:

    • 初始化完成后运行:
    ./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata --initialize --password='你的密码'
  • 配置服务并重启:

    cp support-files/mysql.server /etc/init.d/mysqldldconfigecho "PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.shsource /etc/profile.d/mysql.shchkconfig mysqld on
  • 修改 my.cnf 并重启服务:

    vim /etc/my.cnfservice mysqld start
  • 修改密码:

    mysql -uroot -pdSrp%=Gdw4y:mysql > set password='你的新密码';mysql > FLUSH PRIVILEGES;
  • 关闭防火墙:

    service iptables stopchkconfig iptables off
  • 配置远程访问:

    mysql > use mysql;mysql > update user set host = '%' where user = 'root';mysql > flush privileges;

  • 五、主从复制完整配置

    1. 主服务器开启 Binlog

    修改 my.cnf

    log_bin = mysql-binserver-id = 1binlog-do-db=employeesbinlog-ignore-db=mysqlbinlog-ignore-db=information_schemabinlog-ignore-db=performance_schemabinlog-ignore-db=sysexpire_logs_days=7

    重启数据库并测试:

    service mysqld restartmysql > SHOW VARIABLES LIKE '%log_bin%';

    2. 创建备份账号:

    mysql > GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY '你的密码';

    3. 复制数据

  • 在主服务器备份:

    mysqldump -uroot -p'你的密码' -h localhost employees > /opt/employees.bak
  • 在从服务器恢复:

    scp /opt/employees.bak root@192.168.1.233:/opt/

    从服务器恢复数据并启动复制:

    mysql -uroot -p'你的密码' employees < /opt/employees.bakservice mysqld restart
  • 4. 配置从服务器

  • 修改 my.cnf 并添加以下参数:

    read_only = 1master_info_repository=TABLErelay_log_info_repository=TABLE

    重启数据库:

    service mysqld restart
  • 启动复制并验证状态:

    mysql > stop slave;mysql > CHANGE MASTER TO   MASTER_HOST='192.168.1.222',  MASTER_USER='backup',  MASTER_PASSWORD='你的密码',  MASTER_LOG_FILE='mysql-bin.000002',  MASTER_LOG_POS=154;mysql > start slave;mysql > SHOW SLAVE STATUS \G
  • 5. 验证数据同步

  • 在主服务器创建新表并插入数据:

    use employees;create table test001(id int auto_increment primary key, name varchar(20) not null);insert into test001 values(null, '会');insert into test001 values(null, '今');
  • 在从服务器查看数据:

    use employees;show tables;select * from test001;

  • 通过以上步骤,主从复制配置完成,数据同步正常。

    转载地址:http://ljbfk.baihongyu.com/

    你可能感兴趣的文章
    MQTT工作笔记0009---订阅主题和订阅确认
    查看>>
    Mqtt搭建代理服务器进行通信-浅析
    查看>>
    MS COCO数据集介绍
    查看>>
    MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS SQL查询库、表、列数据结构信息汇总
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>
    MSBuild 教程(2)
    查看>>
    msbuild发布web应用程序
    查看>>
    MSB与LSB
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>