手把手创建 Mysql 主从配置

目前大部分的主流数据库都提供主从热备功能,通过配置两台数据主从关系,可以将一台数据库服务的数据更新同步到另一台服务器上。

网站利用数据库的这一功能,实现数据库的读写分离,从而减轻数据库负载压力。

主数据库负责写操作,从数据库负责查

Mysql 的主从配置教程已经非常多了,但是不亲手实践一下,终究还是有点虚啊

材料两台服务器 Mysql 版本一致

我测试时使用版本为

[root@localhost etc]# mysql -V
mysql  Ver 14.14 Distrib 5.5.58, for Linux (x86_64) using readline 5.1

主库IP:192.168.0.88
从库IP:192.168.0.89

1、配置Master主服务器

连接数据库

 mysql -uroot -proot

添加一个用于主从同步的用户 repl,并且密码是123456,并允许192.168.0.89 服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步

create user repl;
///repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.89' IDENTIFIED BY '123456';

查找数据库配置文件一般为 my.cnf 位置在 /etc/my.cnf

不确定的可以使用 whereis my.* 搜索一下

[root@localhost /]# whereis my.*
my: /etc/my.cnf

先将此文件备份

cd /etc
cp my.cnf my.cnf.back

编辑此文件

vim my.cnf

主要找到两个地方 server-id  与 log-bin

#我的配置现在还是默认的,已经被注释了

#log-bin=mysql-bin
#binlog_format=mixed
#server-id      = 1

然后把这俩个的注释打开。binlog_format 意思是日志格式,现在不是我的重点,先不管。如何设置具体可看这篇文章binlog_format 如何设置 

log-bin=master-bin
#binlog_format=mixed
server-id      = 1

保存之后,退出mysql,exit;  重启Mysql

service mysql restart;

重启之后,连接Mysql 查看 Master 主机状态

show master status\G

这里不需要加分号,加的话会多出一个错误 No query specified,成功情况下会出现以下内容;

这里的参数在配置从数据库时需要使用,Master 服务器就算配置完成了

mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000003
        Position: 107
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

mysql> 

2、配置从数据库

按照第一步找到mysql配置文件的路径,修改配置

vim /etc/my.cnf

#log-bin=mysql-bin
#binlog_format=mixed
#server-id      = 1

修改成:

#log-bin=mysql-bin
#binlog_format=mixed
server-id      = 2

从服务器没必要开启bin-log日志,所以 log-bin 也不用开

现在要测试下,从服务器与主服务器的通讯状态,

在从服务器的数据库 使用 主服务器刚刚创建的用户 repl 远程连接试下

  mysql -urepl -p123456 -h 192.168.0.88

如果连接不成功,检查下 iptables,或者暂时关闭 iptable

// 查看已有规则
iptables -L

//清除 iptable   
iptable -F

连接成功之后,继续从服务器的操作,注意是从服务器

重新连接从服务器Mysql,执行

CHANGE MASTER TO   
MASTER_HOST='192.168.0.88',   
MASTER_USER='repl',   
MASTER_PASSWORD='123456',   
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS= 107;

MASTER_LOG_FILE 与 MASTER_LOG_POS 的值为配置主服务器时的值(此处  各参数详解看这里),

如果不记得了可以在主服务器的Mysql 使用如下命令查看

show master status\G

执行成功,启动Slave

start slave;

查看主从同步状态

show slave status\G

成功的重要参考是上图两个 YES,简单的主从配置就可以了,详细的配置可以再了解了解

主库用来更新,从库用来查询,读写分离就ojbk啦~~

———————————————分割线—————————————————————

我在第一次配置的时候,最后一步也没有成功

此处 Slave_IO_Running: Connecting 并没有 yes

其实命令也给出了错误原因的,我的错误是主服务器拒绝连接

检查顺序

1、iptables 是否关闭

iptables -L

2、账号权限是否足够

主服务器Mysql

show grants for 'repl';

如权限有 REPLICATION SLAVE 那证明没问题

    mysql> show grants for 'repl';
    +-----------------------------------------------------------------------------------------------------------------+
    | Grants for repl@%                                                                                               |
    +-----------------------------------------------------------------------------------------------------------------+
    | GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
    +-----------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

3、账号密码是否错误(一般是这个,注意不能有空格)

清空 researt slave 日志

mysql> stop slave;
mysql> reset slave;

重新执行参数

CHANGE MASTER TO   
MASTER_HOST='192.168.0.88',   
MASTER_USER='repl1',   
MASTER_PASSWORD='123456',   
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS= 107;

重新查看结果

mysql> start slave;
mysql> show slave status\G

4、MASTER_LOG_FILE ,MASTER_LOG_POS 不能错误

检查方式,主服务器执行 show master status\G

mysql> show master status\G

收工

给TA支持
共{{data.count}}人
人已支持
工作日志

PHP 时间段比较

2018-1-6 10:22:23

工作日志随笔

window wamserver 安装 redis 拓展

2018-8-7 17:47:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索