MySQL主从同步配置

7次阅读

共计 1694 个字符,预计需要花费 5 分钟才能阅读完成。

一、准备工作

两台 CentOS7 服务器,安装好 Mysql(CentOS 7 安装 MySQL) 并设置静态 IP,我这里两台服务器 IP 地址分别设置为 192.168.0.150,192.168.0.151。150 作为 master,151 作为 slave。

在 MySQL 主上创建数据库 users,在 users 下面创建表 user,user 表有两个字段 id 和 name,并随意插入几条记录。

二、主从同步配置

1、编辑 MySQL 主上的 /etc/my.cnf

vim /etc/my.cnf

添加以下内容

log-bin=151_mysql
server-id=1
  • log-bin:MySQL 的 bin-log 的名字
  • server-id : MySQL 实例中全局唯一,并且大于 0。

2、编辑 MySQL 从上的 /etc/my.cnf

server-id=2
  • server-id : MySQL 实例中全局唯一,并且大于 0。与主上的 server-id 区分开。

3、在 MySQL 主上创建用于备份账号

mysql> CREATE USER 'repl'@'%' IDENTIFIED` WITH mysql_native_password BY 'password'; 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

4、MySQL 主上加锁,阻止所有的写入操作

mysql> FLUSH TABLES WITH READ LOCK;

5、MySQL 主上,查看 bin-log 的文件名和位置

mysql> SHOW MASTER STATUS;

前面已经设置 log-bin=151_mysql,这里 File 还是 binlog.000001,所以需要刷新一下 log

mysql> flush logs;

再次执行 show master status,此时 File 变为我们前面设定好的 150_mysql

6、MySQL 主上 dump 所有数据,用于同步现有主上的数据。注意,前面主上已经锁表,因此我们不能在主上退出 mysql 客户端,需重新开启一个服务器的连接来执行以下命令。执行完毕后,会生成一个 dbdump.db 的文件。

mysqldump --all-databases --master-data > dbdump.db -uroot -p

7、将 dbdump.db 文件传送到从上。

scp dbdump.db root@192.168.0.151:~

从上也有了 dbdump 文件

现在 MySQL 主可以进行解锁,解锁后,主上可以写入数据

mysql> UNLOCK TABLES;

8、MySQL 从上导入之前 dump 的数据。注意,下面的命令不是在 mysql 的客户端执行的,需退出 mysql 的客户端。

mysql < dbdump.db -uroot -p

导入完毕之后,MySQL 从上拥有了主上同样的数据

9、MySQL 从上配置主从连接信息

mysql> CHANGE MASTER TO
    -> MASTER_HOST='master_host_name',     
    -> MASTER_PORT=port_num,
    -> MASTER_USER='replication_user_name', 
    -> MASTER_PASSWORD='replication_password',                
    -> MASTER_LOG_FILE='recorded_log_file_name',       
    -> MASTER_LOG_POS=recorded_log_position;
  • master_host_name : MySQL 主的地址
  • port_num : MySQL 主的端口(数字型)
  • replication_user_name : 备份账户的用户名
  • replication_password : 备份账户的密码
  • recorded_log_file_name:bin-log 的文件名
  • recorded_log_position : bin-log 的位置(数字型)
  • bin-log 的文件名和位置 是 步骤 5 中的 show master status 得到的。

10、MySQL 从上开启同步

mysql> START SLAVE;

查看 MySQL 从的状态

mysql> show slave status;

三、测试验证

在 MySQL 主上插入一条新数据

数据已同步到从上

正文完
 0