腾讯云为主服务器 mysql5.7版本
阿里云为从服务器 mysql5.7版本
1.开放服务器3306端口
腾讯云
添加规则:
阿里云:服务器防火墙–>添加规则
2.如果主服务器开启了firewalld防火墙,还需要将主服务器的 MySQL 服务加入firewalld防火墙,
如果没有开启了firewalld防火墙,则无需执行此操作
查看是否开启了firewalld防火墙
执行命令systemctl status firewalld
[root@VM_135_190_centos ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-01-27 16:30:20 CST; 41min ago
Docs: man:firewalld(1)
Main PID: 24002 (firewalld)
CGroup: /system.slice/firewalld.service
└─24002 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Jan 27 16:30:20 VM_135_190_centos systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 27 16:30:20 VM_135_190_centos systemd[1]: Started firewalld - dynamic firewall daemon.
将主服务器的 MySQL 服务加入firewalld防火墙
执行命令
sudo firewall-cmd --zone=public --permanent --add-service=mysql
参数介绍:
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、–permanent:表示设置为持久;
3、–add-service:标识添加的服务;
返回success。然后重启firewalld
sudo systemctl restart firewalld
Linux中防火墙firewalld的配置与基本命令可以参考帖子:点我传送
3.主从服务器配置,参考帖子:
另外注意几点:
1.配置主服务器my.cnf时,注释掉bind_address
2.从服务器配置跳过错误:
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
slave-skip-errors=all #跳过所有错误
4.MySQL主从仅同步指定库
有两种方式,
- 在主库上指定主库二进制日志记录的库或忽略的库:
vim /etc/my.cnf
binlog-do-db=xxxx 二进制日志记录的数据库
binlog-ignore-db=xxxx 二进制日志中忽略数据库
#以上任意指定其中一行参数就行,如果需要忽略多个库,则添加多行
重启mysql
- 在从库上指定复制哪些库或者不负责哪些库
#编辑my.cnf,在mysqld字段添加如下内容:
replicate-do-db #设定需要复制的数据库
replicate-ignore-db #设定需要忽略的复制数据库
replicate-do-table #设定需要复制的表
replicate-ignore-table #设定需要忽略的复制表
replicate-wild-do-table #同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table #同replication-ignore-table功能一样,但是可以加通配符
#修改后重启mysql
5.常见问题:
配置完成之后查看从服务状态:
show slave status\G
未成功:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60 retries: 1
查看具体错误:
Slave I/O for channel ‘’: error connecting to master ‘[email protected]:3306’ - retry-time: 60 retries: 13, Error_code: 2003
我这里是因为开启了firewalld防火墙,没有将MySQL 服务加入firewalld防火墙导致的。这里提供一些参考的帖子
下列是所有的错误代码号
https://blog.csdn.net/xiaoborui20110806/article/details/37756887
常见问题排查
1因为网络连接不同:
可以试试能否ping通(可能需要开放相应的端口,例如腾讯云需要加入ICMP端口)
2.主服务器mysql的配置文件my.cnf中配置了bind_address 配置了固定ip连接
执行netstat -tulpen | grep 3306查看 (3306是使用的端口号)
[root@iz2ze84rhxwhgxrytr6bx3z ~]# netstat -tulpen | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 1002 712212 13212/mysqld
我这是:::3306,如果是一些国定ip地址,需要将my.cnf中配置了bind_address注释掉,重启mysql
3.排查用户和密码问题
主服务器mysql中执行
mysql> select user, host from mysql.user;
+---------------+--------------+
| user | host |
+---------------+--------------+
| manager | % |
| faka_kele_cn | 127.0.0.1 |
| mytest | 127.0.0.1 |
| o2o | 127.0.0.1 |
| manager | 192.96.59.11 |
| faka_kele_cn | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| mytest | localhost |
| o2o | localhost |
| root | localhost |
+---------------+--------------+
11 rows in set (0.00 sec)
manager是我配置的主从同步的用户:地址:192.96.59.11
可使用命令进行更改:grant replication slave on . to manager@‘192.96.59.11’ identified by ‘123456’;
4.查看端口是否正确:
[root@VM_135_190_centos ~]# ps -ef | grep mysqld
root 1204 1 0 15:24 ? 00:00:00 /bin/sh /www/server/mysql/bin/mysqld_safe --datadir=/www/server/data --pid-file=/www/server/data/VM_135_190_centos.pid
mysql 2710 1204 0 15:24 ? 00:00:03 /www/server/mysql/bin/mysqld --basedir=/www/server/mysql --datadir=/www/server/data --plugin-dir=/www/server/mysql/lib/plugin --user=mysql --log-error=VM_135_190_centos.err --open-files-limit=65535 --pid-file=/www/server/data/VM_135_190_centos.pid --socket=/tmp/mysql.sock --port=3306
–port=3306,默认3306,,不正确可以修改my.cnf配置文件后重启