操作系统 CentOS 7.6,mysql 版本 5.7

主从同步流程

image

  1. master会将自身的操作记录到bin-log里面
  2. slave有一个I/O线程,去读取master的bin-log写入到relay日志
  3. slave有一个SQL线程,按照relay日志处理slave的数据
mysql配置

如果之前主库中已经有数据存在,那么需要使用 mysqldump 命令把master的库dump下来导入到slave库中,确保2边数据一致。

mysqldump -uroot -p --default-character-set=utf8 --all-databases --single-transaction --routines  -q --triggers --events --master-data=2 --flush-logs  > master-bak.sql
  • master 配置

查看mysql配置文件

vim /etc/my.cnf

确认是否开启log-bin,log名字可以自己取,server-id是唯一的,不同mysql不能重复,会根据这个找对应的服务。

log-bin=mysql-bin
server-id=1

授权账号给slave 复制master 的bin-log

mysql>GRANT REPLICATION SLAVE ON *.* TO 'master用户'@'slave的ip' IDENTIFIED BY '123456';

刷新权限命令

mysql>flush privileges;

如果改动了my.cnf,需要重启下mysql

service mysqld restart

查看master日志文件

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000029 |   154859 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

File: 日志文件名称
Position: 日志所在位置 ;这2个后面配置需要用,slave会根据这个去读取master

  • slave 配置

查看slave配置文件

vim /etc/my.cnf

确认配置log-bin和server-id

log-bin=mysql-bin
server-id=2

这个就是配置上面master授权的账户和master的log 文件名和位置

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='mysql-bin.000029',
    ->     MASTER_LOG_POS=154859;

启动slave

mysql> START SLAVE;

查看slave 状态

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.221.60
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000029
          Read_Master_Log_Pos: 155074
               Relay_Log_File: mysql2-relay-bin.000002
                Relay_Log_Pos: 155240
        Relay_Master_Log_File: mysql-bin.000029
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

mysql官方文档


sf4y
23 声望7 粉丝