mysql主主同步的配置

主主同步事实上就是在主从的基础上,将原先的从机当主机,主机当从机再配置一遍主从同步,具体操作如下:

 

注意:配置过程中个人使用的指令所需要的权限比较高,主要是因为个人习惯了用root账户操作,如果使用自己创建的账户(输入指令时是‘$’ 而非‘#’,‘#’表示系统账户)可能会说权限不足,请自行切换到root用户或使用可执行的其他等效指令

 

1.在阿里云数据库1的my.cnf的mysqld节点添加以下配置:

port=3305

server-id=1

log-bin=mysql-bin

auto_increment_increment=2

auto_increment_offset=1

binlog-ignore=mysql

binlog-ignore=information_schema

binlog-ignore=performance_schema

character_set_server=utf8

log-bin-trust-function-creators=1

 

2.在阿里云数据库2的my.cnf的mysqld节点添加以下配置

port=3305

server-id=2

log-bin=mysql-bin

auto_increment_increment=2

auto_increment_offset=2

binlog-ignore=mysql

binlog-ignore=information_schema

binlog-ignore=performance_schema

character_set_server=utf8

log-bin-trust-function-creators=1

这里对上述添加的配置做详细说明:

port=3305 将mysql启动端口设置成3305(默认为3306)

log_bin 启动mysql二进制日志,如果没有配置这个将无法远程链接

binlog-ignore 指定不同步的数据库,如果有多个数据库不需要同步可以多个分别声明

character_set_server=utf8 指定utf8为默认字符集

server-id   可以为任意自然数,必须保证两台mysql主机不重复

auto_increment_increment=2   步进值auto_imcrement。一般有n台主MySQL就填n

auto_increment_offset   设定数据库中自动增长的起点,两台mysql的起点必须不同,这样才能避免两台服务器同步时出现主键冲突

replicate-do-db  要同步的数据库,如果需要就填,指定数据库的名称即可,默认为所有库,声明了不同步就默认除了不同步数据库意外的所有库。这里我没写。

log-bin-trust-function-creators=1 在默认情况下mysql会阻止主从同步的数据库function的创建,这会导致我们在导入sql文件时如果有创建function或者使用function的语句将会报错。

在主主同步所需要的主要为以上所介绍到的配置,当然还有其他的配置可以添加,具体的根据实际要求可百度查询。

 

3.重启mysql

执行指令:service mysqld restart

 

4.进入mysql:

 mysql -uroot -p

 

5.相互授权:

192.168.18.129数据库1:

grant replication slave, replication client on *.* to 'iot123'@'192.168.18.130' identified by 'iot123'

 

flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接

 

192.168.18.130数据库2:

grant replication slave, replication client on *.* to 'iot123'@'192.168.18.129' identified by 'iot123';

 

flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接

 

注意:推荐两个主机相互授权的账号密码相同,否则在接下来的操作中可能会比较乱(我就是之前用了俩个不同的账号搞了好久也没搞定,后来改成相同的账号瞬间成功)

 

6.分别查看两台主机的日志节点:

show master status;

7.相互设置同步的日志节点

192.168.18.129:

mysql> change master to 
    ->master_host='192.168.18.130', 
    ->master_port=3305, 
    ->master_user='iot123',
    ->master_password='iot123',
    ->master_log_file='mysql-bin.000010',
    ->master_log_pos=120;

192.168.18.130:

mysql> change master to 
    ->master_host='192.168.18.129', 
    ->master_port=3305, 
    ->master_user='iot123',
    ->master_password='iot123',
    ->master_log_file='mysql-bin.000012',
    ->master_log_pos=120;

 

分段写如果写错了\c退出,第二段开始最后是逗号,最有一段是分号,表结束,端口号和pos不用加引号,其他的配置需要加引号

 

说明:

所有的内容都是另一台主机的内容,log_file和log_pos对于另一台主机的日志节点。还有,必须要说明的是,每次“flush privileges”和“stop slave”后日志节点的内容会改变,所以如果不确定,每次执行此操作前必须要查看日志节点——show master status。另外,执行此操作时slave必须没有启动,如果之前执行了,那就先停止,指令:stop slave;

 

9.在两台主机上启动slave服务

start slave;

 

查看状态:

show slave status\G

结果如下:

上图表示成功

10.异常及解决方法

如果状态如下图所示:

 

往下看有错误提示,错误原因大致如下:

网络不通

账号密码错误

pos错误

3305端口未开放

 

解决方法如下:

1.网络不通——你相互ping一下各自的ip地址,ping的通就说明不是这个问题,我是开的两台虚拟机,在同一局域网内,所以肯定通,如果你用的是阿里云啊之类的外网服务器,ping不通就检查网络接口之类的。

2.账号密码错误——把两台主机的账号密码设置成相同的好处就是不会出现这种情况,我之前账号密码搞混弄了好久

3.pos错误——看看当前日志节点内容与你之前打的一样不,反正重新来一遍准没错

4.3305端口未开放:

找到iptables文件(etc/sysconfig/iptables)

再里面添加如下内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3305 -j ACCEPT

  

个人开放端口如下

重启防火墙:

service iptables restart

 

尝试一下能不能navecat远程链接数据库,不行的话就直接把防火墙关了。

在数据库相互授权的过程中可能会报错

原因,设置的密码太简单,不符合MySQL5.7的默认要求

如果想要密码设置简单点,方法如下:

mysql > set global validate_password_policy=0;
mysql > set global validate_password_length=4;

上述是把密码程度设置成最低级,密码长度设置成4(最小是4,不能再少了)

猜你喜欢

转载自blog.csdn.net/m0_37673753/article/details/81281444