mysql主从复制 坑_Mysql主从复制及配置实现以及坑坑坑

今天搞Mysql主从复制,遇到了很多坑,在此记录相关操作。

今天用tp5.1进行mysql 的主从复制,数据库配置如下:

// 数据库类型

'type' => 'mysql',

// 服务器地址

'hostname' => 'localhost,60.205.204.160',

// 数据库名

'database' => 'database',

// 用户名

'username' => 'username',

// 密码

'password' => '111111',

// 端口

'hostport' => '3306',

// 数据库调试模式

'debug' => true,

// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)

'deploy' => 1,

// 数据库读写是否分离 主从式有效

'rw_separate' => true,

// 读写分离后 主服务器数量

'master_num' => 1,

// 指定从服务器序号

'slave_no' => '0',

两台服务器都是CENTOS

ip1,ip2

首先要开启二进制

在mysql配置文件中

log-bin=mysql-bin

开始构建主从复制

第一步:

在主服务器配置如下:

在ip1中创建一个ip2主机中可以登录的MySQL用户

用户:ip2_user

密码:ip2_pwd

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘ip2_user’@’ip2' IDENTIFIED BY ‘ip2_pwd’;

mysql>FLUSH PRIVILEGES;

第二步:

查看ip1MySQL服务器二进制文件名与位置

mysql>SHOW MASTER STATUS;

mysql>show master status \G;

4ee79a7f19953bc4e6b00f30cb4949b6.png

查看ip1MySQL服务器二进制文件名与位置

第三步:

告知二进制文件名与位置

在从服务器中配置如下:

在ip2中执行:

mysql>CHANGE MASTER TO

>MASTER_HOST=’ip1’,

>MASTER_USER=’ip2_user’,

>MASTER_PASSWORD=’ip2_pwd’,

>MASTER_LOG_FILE=’mysql-bin.000004’,

>MASTER_LOG_POS=2015812;

测试主从复制

在ip2(从服务器)中开启主从复制:

mysql>start slave; #开启复制

mysql>SHOW SLAVE STATUS\G #查看主从复制是否配置成功

Slave_IO_State:

Master_Host: 118.24.2.153

Master_User: tp_gcan_top

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 2015812

Relay_Log_File: iz2ze4j3dpfuv8vtlac7ymz-relay-bin.000002

Relay_Log_Pos: 4

Relay_Master_Log_File:

Slave_IO_Running: No

Slave_SQL_Running: No

由上可以发现下面两个出现异常:

Slave_IO_Running: No

Slave_SQL_Running: No

如果这两个都是Yes,说明主从复制已经配置成功了。

解决方法如下:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

START SLAVE;

mysql>SHOW SLAVE STATUS\G

Slave_SQL_Running: Yes

Slave_SQL_Running已经变成Yes,那么就剩下Slave_IO_Running: No要解决了

导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面:

1、网络不通

2、密码不对

3、pos不对

# telnet ip1 3306

Trying ip1...

telnet: connect to address ip1: No route to host

测试ip1 3306端口是否连通,发现 No route to host

说明ip1没有放行3306端口。

将ip1的3306端口放行即可。

放行端口后已经可以连通,但是Slave_IO_Running: No还是NO

mysql同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,因此server-id一定要有的

每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;

每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,前一个将被踢掉。

这里至少有这么一种考虑 slave主动连接master之后,如果slave上面执行了slave stop;

则连接断开,但是master上对应的线程并没有退出;

当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题

因为我的两台服务器的mysql配置文件中

server-id = 1

这个配置是相同的,所以我将从服务器的server-id值更改如下:

server-id = 2

然后我将从服务器的mysql重启发现:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

好了,这时主从复制已经配置成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值