Mysql主从复制配置方式 及 从机连不上主机 Slave_IO_Running: Connecting 状态值一直是Connecting
搭建服务器(单主多从):
一:准备工作:
1:克隆多台虚拟机:
主机ip是:192.168.204.137
从机IP是:192.168.204.144
2:修改每台机器的MAC地址:
注意:因为是克隆的机器,所以MAC地址会一样,但是每台虚拟机的MAC地址必须要求不一致,所以这里需要生成新的MAC地址;
3:删除auto.cnf文件:
注意:这里不是删除也是可以的,直接编辑该文件,修改其值,只要值不一样即可;删除的话,重新启动后会生成新的auto.cnf文件;
4:关闭防火墙,并查看mysql的端口是否已经被监听:
这个可根据实际情况来考虑是否要关闭防火墙,如果必须开着防火墙,那么就在网上搜下Linux防火墙给端口开放资源的命令,这个我也不是很懂;
二:搭建主服务器:
1:编辑mysql的配置文件:
vi /etc/my.cnf
在 [mysqld]下面加上下列的代码:
// 编辑mysql配置文件
// 在[mysqld]下面加上:
// log-bin代表开启主从复制,server-id代表主从服务器的唯一标识
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
2:登陆Mysql,创建用户,并授权:
// 登录mysql
mysql -u root -p
// 去除密码权限
SET GLOBAL validate_password_policy=0;
SET GLOBAL validate_password_length=1;
// 创建用户
CREATE USER ‘username’@’%’ IDENTIFIED BY ‘password’;
// 授权
GRANT ALL ON . TO ‘username’@’%’;
注意:这里如果想要给用户只针对一台虚拟机授权,也是可以的;
// 只是授予读写同步的权限给144的IP的虚拟机
grant ALL slave on . to ‘账号’@‘192.168.204.144%’ identified by ‘密码’;
//授予全部权限给144IP的虚拟机
GRANT ALL PRIVILEGES ON . TO wwn223627@"%" ;
3:重启Mysql服务并重新登陆:
//重启
systemctl restart mysqld;
// 登陆
mysql -u root -p
4:查看主服务器配置:
// 查看主服务器配置
show master status\G;
注意:一定要记得File和POS的值,后续配置从服务器要用到;
三:配置从服务器:
1:编辑从机的my.cnf文件:
// 编辑mysql配置文件
vi /etc/my.cnf
// 在[mysqld]下面加上:
server-id=2
2:重新登录mysql,并删除掉mysql自带的主从复制:
// 登录mysql
mysql -u root -p
// 执行
use mysql;
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
source /usr/share/mysql/mysql_system_tables.sql;
3:重启mysql,并重新登录,然后配置从节点
// 重启mysql
service mysqld restart
// 重新登录mysql
mysql -u root -p
// 执行下列代码,配置从机节点
change master to master_host='ip地址',master_port=3306,master_user='username',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=154;
参数说明:
---- IP地址:主机的IP地址;
---- username:配置主机时创建并授权的那个用户;
---- password:用户的密码;
---- master_log_file和master_log_pos:必须和配置主机时显示的master的状态值一致;(和下图的值必须对应且一致)
3:重启mysql,并重新登录,开启从服务器
// 重启mysql
service mysqld restart
// 重新登录mysql
mysql -u root -p
// 开启从节点
start slave;
// 查询结果
show slave status\G;
//Slave_IO_Running和Slave_SQL_Running都为yes才表示同步成功。
4:注意事项
虚拟机重启后,主机的File和POS的值会发生改变;配置文件改变值的话,File和POS的值也会发生改变,所以如果看到从机的状态不都为yes的话,要去查看下这个值有没有错误;
至于要怎么弄才能让虚拟机重启后从机的File值和POS的值跟着主机一起改变,这个我也不知道,如果有知道的,希望能讲解下
出现的问题:
解决思路:
去从机的 /etc/my.cnf文件中查看error文件的地址在哪;
动态查看错误文件,发现是无法连接上主机;
网上看了很多方法,总结下来无非就是以下几点:
1.网络不通
2.账户密码错误
3.防火墙
4.mysql配置文件问题
5.连接服务器时语法
6.主服务器mysql权限
1:账号问题:
所谓的账号密码,就是在主机上创建专门给做主从复制创建的用户的账号和密码;如果在做主从复制的时候没有设置账号,也可以用主机上在使用的账号;
这个我是在创建的时候直接粘贴在文本文件中的,没有错误;
2:防火墙问题:
我是直接把防火墙的开机自启动给关了的,也把电脑的防火墙也关掉了,但是还是没有解决问题,所以我这个不是防火墙的原因导致的;
可以通过systemctl status firewalld查看防火墙是否开着;如果开着, 可以通过 systemctl stop firewalld 关掉防火墙,或者通过systemctl disable firewalld直接把防火墙的开机自启动给关掉;
3:配置文件问题:
1)检查主机的 /etc/my.cnf 文件,
主机和从机的的server-id不一致,且主机的log-bin也开启了,没有问题;
2) 检查主机的 /var/lib/mysql/auto.cnf 文件,查看uuid是否一致;
server-uuid必须不一致,这个是唯一标识;
3)查看Linux系统下的端口号是否被监听,查看mysql是否正常启动;
4:配置从服务器的语法问题:
1) 主服务器上File和POS:
2)从服务器中配置从节点会不会配置错误:
master_host:主服务器Ubuntu的ip地址
master_log_file: 前面查询到的主服务器日志文件名
master_log_pos: 前面查询到的主服务器日志文件位置
change master to master_host='ip地址',master_port=3306,master_user='username',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=154;
再者注意下,引号逗号等会不会弄成中文的,这个建议在文本文件中先编写好,没问题后再直接粘贴执行;
5:权限问题:
可以去主机中查看下给username用户配置的权限是否足够;
我的权限是足够的;
6:网络问题:
1)主机和本地电脑,以及外网和从机都ping一下,看是否能ping通;
2)从机和本地电脑,以及外网和主机都ping一下,看是否能ping通;
6:网络问题:
我出现的情况是:虚拟机之间不能相互ping通,但是不管是主机还是从机,都能ping本地和外网;
首先查看了MAC地址,不一样的,然后是网段,也就是说主机和从机也必须处于192.168.204的网段中;我这个我也是没问题的;
我参考了 https://www.cnblogs.com/GaZeon/p/5327517.html 的文章,的下面这段话:
使用nat方式默认的虚拟机配置下使用dhcp自动获取ip即可。如果要自己定义静态ip的话,进入
edit->virtual network setting->host virtual network mapping->vmnet8,点后面的>,subnet可以看到nat所在的网段,自己设置一个该网段的ip也可以(也可以在此修改为其他网段,保证虚拟机中的网段和这里一致),虚拟机网关ip在nat标签下可以看到。
个人比较喜欢用nat方式,不用受限于局域网环境。但是只能虚拟机访问外部网络,外部除了主机外其他不能访问虚拟机(但是可以通过设置端口映射实现)。
应该是连接的方式有有问题,我的是双网卡,而且都是nat模式,看网上的很多文章说的是要桥接模式,然后我把虚拟机用的那个网卡设置成桥接模式,发现无法CentOS无法连接,尝试吧虚拟机中的另一个设置成桥接模式,ping了一下,结果虚拟机ping通了 ,问题解决;