MySQL主从复制配置记录

准备阶段

  • 两台服务器:(主master)192.168.1.2;(从slave)192.168.1.3
  • MySQL版本最好一样,不一样没关系,但一定要保证版本都在5.6.x及以上
  • 注意防火墙
  • 注意放行3306端口
  • 注意要开启MySQL远程连接权限
  • 注意主从库的数据要保证一致

配置主服务器

  • 配置文件

    /etc/my.cnf
  • 配置信息

    vim /etc/my.cnf

    [mysqld]下面配置如下:

    server-id=1   #必须。设置服务器id,为1表示主服务器。规范为服务器IP的最后段(一般文件里已存在,修改就行,没有加上)
    log_bin=mysql-bin  #必须。启动MySQL二进制日志系统。(一般文件里已存在,修改就行,没有加上)
    binlog-do-db=jiajiale_dskjwl_  #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行。
    binlog-ignore-db=mysql   #不同步mysql系统数据库。
    :wq!
    保存退出
  • 进入MySQL终端

    mysql -u root -p
  • 新建一个MySQL用户salve(下面从服务器要用到此配置)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.%' IDENTIFIED BY 'slave'; 这里的IP是从服务器IP
  • 刷新权限(很重要!不要漏掉!)

    mysql> flush privileges; 
  • 重启MySQL服务

    service mysql restart
  • 再次回到MySQL终端,执行

    mysql> show master status;

MySQL主从复制配置记录

红框内的值从服务器要用到,很重要。此时不要再动主服务器了,以免position值变动。

配置从服务器

  • 配置文件

    /etc/my.cnf
  • 配置信息

    vim /etc/my.cnf

    [mysqld]下面配置如下:

    server-id=2   #必须。设置服务器id,为2表示从服务器。规范为服务器IP的最后段(一般文件里已存在,修改就行,没有加上)
    log_bin=mysql-bin  #必须。启动MySQL二进制日志系统。(一般文件里已存在,修改就行,没有加上)
    binlog-do-db=jiajiale_dskjwl_  #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行。
    binlog-ignore-db=mysql   #不同步mysql系统数据库。
    :wq!
    保存退出

    重启MySQL服务

    service mysql restart
  • 进入MySQL终端

    mysql -u root -p

    执行

    mysql> change master to master_host='192.168.1.2',master_user='slave',master_password='slave',master_log_file='mysql-bin.000065',master_log_pos=154;
  • 停止slave从库

    mysql> stop slave;

    最好执行一下 第一次操作可忽略

  • 启动slave从库

mysql> start slave
  • 查看slave
mysql> show slave status \G 注意此处不要分号

结果如下图:

MySQL主从复制配置记录

Slave_IO_RunningSlave_SQL_Running都为Yes时才算成功!

测试

省略…

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

还有一种是基于GTID的同步模式

1年前 评论
隐德莱希 (楼主) 1年前
猪猪

先收藏,用到的时候再说 :see_no_evil:

1年前 评论
隐德莱希 (楼主) 1年前

假如主服务器宕机了,重新启动后,position产生变化,从服务器也修改position值,这中间是否会有数据的遗失呢?谢谢

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!