MySql教程

详细的搭建mysql主从复制

本文主要是介绍详细的搭建mysql主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 1. master配置
      • 1.1 配置文件设置
      • 1.2 重启mysql使得配置生效
      • 1.3 master上创建用于复制的账号
      • 1.4 记录master上binlog的位置
      • 1.5 备份master上的数据
      • 1.6 将master上备份文件同步到slave机器上
    • 2. slave配置
      • 2.1 配置配置文件
      • 2.2 重新启动服务器
      • 2.3 导入之前备份的文件
      • 2.4 建立从库与主库之间通信
      • 2.5 查看备份状态
    • 检测主从复制是否可以同步
      • 1. 在主、从数据库建立数据库
      • 2. 创建测试表
      • 3. 登录从服务器,观察数据表是否同步
    • 总结

首先介绍一些我的基本环境信息:

系统版本:centOs

Mysql版本: 5.7.22

主库ip: 10.138.65.2
从库ip: 10.12.206.89

1. master配置

1.1 配置文件设置

在配置文件中配置如下信息,

1、配置 Master 以使用基于二进制日志文件位置的复制

2、必须启用二进制日志记录并建立唯一的服务器ID,否则则无法进行主从复制。

3、设置 binlog 文件的格式

vim /etc/my.cnf
bind_address                    = 0.0.0.0			# 允许所有机器远程连接

# binlog配置

log_bin          = /home/local/mysql/mysql-bin.log
# 必须设置唯一的server-id
server-id        = 1
binlog_format    = ROW

1.2 重启mysql使得配置生效

service mysql restart

1.3 master上创建用于复制的账号

首先以root账号登录主机mysql

mysql -h -uroot -p

在主库创建从库的账号及密码,并且使得从库可以连接,通过需要给账号授予复制权限,可以选择为每个从库创建不同的帐户,或者每个从库使用相同帐户连接到主库。

这里我给从库ip创建了 repl 账号,并且赋予了 复制权限。

# 创建复制账号

CREATE USER 'repl'@'10.12.206.89' IDENTIFIED BY 'slavepass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.12.206.89';

1.4 记录master上binlog的位置

在主机中执行,该信息主要是用于slave上配置从哪个位置开始复制

mysql> show master status;

-- 结果如下
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000012 |     1176 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

1.5 备份master上的数据

将主机上所有数据库文件被分到 dbdump.sql文件中,主要是用于恢复文件。

mysqldump -u root -p --all-databases --master-data > dbdump.sql

1.6 将master上备份文件同步到slave机器上

scp dbdump.sql 10.12.206.89:/tmp

2. slave配置

2.1 配置配置文件

同样在 /etc/my.cnf 下配置如下配置,主要是设置从服务器监听的ip地址,设置server-id,注意这个id必须与主机的id不一样。

通过是要开启binlog配置,并且设置binlog的文件格式及文件路径

# bin log 配置
bind-address = 10.12.206.89
log_bin          = /home/work/local/mysql/mysql-bin.log
server-id        = 2
binlog_format    = ROW

2.2 重新启动服务器

service mysql restart

2.3 导入之前备份的文件

当然这一步也不是必须的,可以备份,也可以不用备份。

mysql -u root -p < /tmp/dbdump.sql

2.4 建立从库与主库之间通信

1、首先以 root 用户登录mysql服务器

mysql -u root -p

2、暂停备份

stop salve;

3、创建从库与主库之间通信

主要配置如下信息:主库id、端口、备份账号、密码、主库的开始bin-log文件

CHANGE MASTER TO
MASTER_HOST='10.138.65.2',
MASTER_PORT=8306,
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.000012',	
MASTER_LOG_POS=1176;

4、开始备份

start slave;

2.5 查看备份状态

mysql>  show slave status\G

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.138.65.2
                  Master_User: repl
                  Master_Port: 8306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 2698
               Relay_Log_File: public-relay-bin.000012
                Relay_Log_Pos: 2911
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
	………………
  Seconds_Behind_Master: 0
  ………………

怎么看备份是否建立成功呢?

其实主要看三个地方

1、Slave_IO_Running:读取主程序二进制日志的I/O线程是否正在运行【如果是yes表示建立成功】

2、Slave_SQL_Running:执行读取主服务器中二进制日志事件的SQL线程是否正在运行【如果是yes表示建立成功】

3、Seconds_Behind_Master:0 【表示无延迟,如果是null,则一般未建立】

检测主从复制是否可以同步

1. 在主、从数据库建立数据库

登录主服务器,创建一个用于测试的数据库,比如

mysql> CREATE DATABASE `test`;
mysql> use test

2. 创建测试表

创建一个用于测试的数据库

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

3. 登录从服务器,观察数据表是否同步

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

总结

到这里,主从服务器搭建成功了,如果大家测试中遇到什么问题,不要担心,只需要查询资料即可,一般问题之前的人都踩过坑的。

这篇关于详细的搭建mysql主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!