Mysql主主,主从集群部署

目录

​架构

mysql 安装

集群配置

注意:

添加主从同步账户

配置同步信息

配置从节点



​架构

masterA: 123.23.23.1

masterB: 123.23.23.2

互为主从,数据互相同步,通过binary log 数据互相同步,其实两个库里面的数据是一致的。

简单来说,相比主从更具有健壮性。

mysql 安装

这里可以参考网上的mysql服务器安装教程 ,略过

集群配置

服务器:

masterA: 123.23.23.1

masterB: 123.23.23.2

修改各个master配置文件my.cnf

文件位置一般在 /etc/my.cnf 或者mysql安装目录/public/mysql/my.cnf

masterA:

[mysqld]
server-id=1
auto_increment_offset=1
auto_increment_increment=2                                          #奇数ID
​
log-bin=mysql-bin                                                     
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
max_binlog_size=1024M                                                   
​
replicate_wild_ignore_table =mysql.%
replicate_wild_ignore_table =test.%
replicate_wild_ignore_table =information_schema.%
replicate_wild_ignore_table =performance_schema.%
​
max_connections=3000
max_connect_errors=30
​
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default-storage-engine=INNODB
lower_case_table_names=1
slave_skip_errors=ddl_exist_errors
skip-character-set-client-handshake                                     
init-connect='SET NAMES utf8'                                           
character-set-server=utf8                                               
wait_timeout=1800                                                       
interactive_timeout=1800                                                
skip-name-resolve

masterB:

[mysqld]
server-id=2
auto_increment_offset=2    #AUTO_INCREMENT列值的起点,也就是初始值。取值范围是1 .. 65535
auto_increment_increment=2 #偶数ID  控制列中的值的增量值,也就是步长。其默认值是1,取值范围是1 .. 65535
​
log-bin=mysql-bin                                                     
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
max_binlog_size=1024M                                                   
​
replicate_wild_ignore_table =mysql.%
replicate_wild_ignore_table =test.%
replicate_wild_ignore_table =information_schema.%
replicate_wild_ignore_table =performance_schema.%
max_connections=3000
max_connect_errors=30
​
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
default-storage-engine=INNODB
lower_case_table_names=1
slave_skip_errors=ddl_exist_errors
skip-character-set-client-handshake                                     
init-connect='SET NAMES utf8'                                           
character-set-server=utf8                                               
wait_timeout=1800                                                       
interactive_timeout=1800                                                
skip-name-resolve

其实主要配置是

server-id=1
auto_increment_offset=1
auto_increment_increment=2                                          #奇数ID
​
log-bin=mysql-bin 

然后分别重启两个数据库。

注意:

两台数据库的配置差别就在于server-id不同,以及auto_increment_offset的不同,如果有N个主,每个主的auto_increment_offset可分别设置为1、2….直到N, 而auto_increment_increment设置为N。

建立授权用户

查看具有权限的用户:Repl_slave_priv

select host,user,Repl_slave_priv from mysql.`user`

一般root用户即可满足。

添加主从同步账户

(PS:笔者在操作中发现,这步命令执行失败显示:1045 - Access denied for user 'root'@'%' (using password: YES),但是密码没错,用户也是有权限的,很尴尬,查找 了半天这个命令也不通过,然后续继续往下执行,发现还是可以实现同步数据,希望有大佬看到这里,给我留个言,让我了解下,感谢!)

我想了下,因为我是用root@%用户登录的,所以,这步其实是可以省略的,但是为什么会报错呢

在masterA上执行:

grant replication slave on *.* to 'root'@'123.23.23.2' identified by 'password';
flush privileges;

在masterB上执行:

grant replication slave on *.* to 'root'@'123.23.23.1' identified by 'password';
flush privileges;

查看主库状态

masterA执行:

show master status;

得到结果:

记下下面的File和Position对应的值。

同理masterB上面也是这样操作。

配置同步信息

在masterA上执行:B的 File和Position的值在这里放这里

change master to 
master_host='123.23.23.2',master_port=3306,master_user='root',master_password='****',master_log_file='mysql-bin.000001',master_log_pos=3013;

在masterB上执行:A的File和Position的值在这里放这里

change master to 
master_host='123.23.23.1',master_port=3306,master_user='root',master_password='****',master_log_file='mysql-bin.000001',master_log_pos=3013;

随后分别在两个主库执行:

start slave;
show slave status;

显示下面的结果即为正常:

 

到此,两个主库已经建立了互为主从关系,我们可以测试在masterA新建一个数据库是否会在masterB库中出现。

配置从节点

假设我们新增一个从节点,是masterB的从节点:

理论上说,需要执行我在上面说的哪个执行不了的步骤,用在masterA上面执行的即可,执行不通过,也可以继续往下走:

在slaveC上执行:B的 File和Position的值在这里放这里

change master to 
master_host='123.23.23.2',master_port=3306,master_user='root',master_password='****',master_log_file='mysql-bin.000001',master_log_pos=3013;

随后在slaveC上执行:

start slave;
show slave status;

显示和Slave_IO_Running 和Slave_SQL_Running 都是Yes,就是正常的,

另外,如果项配置从库只读,可以在从库的my.cnf里面添加一个  read-only = 1 或者在客户端执行

set read_only = 1;

不过此命令对超级管理员无效,请注意。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值