首页 > 代码库 > centos7配置mysql的主从复制

centos7配置mysql的主从复制

主 192.168.2.10

从192.168.2.11

先配置主mysql

vi /etc/my.cnf

找到 [mysqld] 并在其后添加如下配置:
唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值
server-id=1

二进制日志文件名字,MySQL 主服务器必须启用此配置
log-bin=master-bin-log

 MySQL 主服务器中参与主从复制的数据库名;如果有多个数据库,则此参数可以有多个,每行一个,分部对应不同的数据库
binlog-do-db=db_master_backup
MySQL 主服务器中二进制日志文件的索引名
og-bin-index=master-bin-log.index


创建数据库 db_master_backup

create database db_master_backup;


创建用户 backup,并设置密码 backup_123456:
create user ‘backup‘@‘%‘ identified by ‘backup_123456‘;


为用户backup 赋权对 db_master_backup 数据库的所有权限:
 grant all on db_master_backup.* to ‘backup‘@‘%‘;


为用户backup 赋本地访问的权限:
grant all privileges on db_master_backup.* to ‘backup‘@‘localhost‘ identified by ‘backup_123456‘;


授权从服务器可以通过 backup 用户访问主服务器:
grant replication slave on *.* to ‘backup‘@‘%‘ identified by ‘backup_123456‘ with grant option;

配置从数据库

vi /etc/my.cnf

# 唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值
server-id=2
# MySQL 从服务器的日志索引文件名

relay-log-index=slave-relay-log.index
# MySQL 从服务器的日志文件名

relay-log=slave-relay-log


创建数据库 db_master_backup

create database db_master_backup;


重启两个mysql服务

查看主服务器的状态:
show master status;


在从服务上执行如下配置:

change master to master_host=‘192.168.2.10‘,        // 主服务器IP
master_port=3306,
master_user=‘user_master‘,
master_password=‘Password_Master_123456‘,
master_log_file=‘master-bin-log.000001‘,    // 主服务器 master_log_file 的值
master_log_pos=364;    // 主服务器 master_log_pos 的值

mysql> stop slave;

mysql> start slave;


执行 show slave status \G

如果有Error reading packet from server for channel ‘‘: Could not find first log file name in binary log index file 报错

解决步骤:

重启master库:service mysqld restart

mysql> show master status;

技术分享


在从库上执行

mysql> stop slave;

mysql> change master to Master_Log_File=‘master-bin-log.000002‘,Master_Log_Pos=154;

mysql> slave start;

mysql> show slave status\G

技术分享

在 MySQL master 服务器的 db_master_backup 库中为用户名 t_user 添加数据:
mysql> insert into t_user(id, name) values(1, ‘idea1‘);
mysql> select * from t_user;

在主服务器上建立脚本向t_user中插入数据

#!/bin/bash
i=1;
MAX_INSERT_ROW_COUNT=$1;
while [ $i -lt 100 ]
do
    mysql -uroot -p123456 db_master_backup -e "insert into t_user () values (‘$i‘,$i);"
    echo "INSERT HELLO $i @@ $d"
    i=$(($i+1))
    sleep 0.05
done
exit 0

在从数据库中查看数据是否同步

mysql> select * from t_user;


centos7配置mysql的主从复制