Mysql innodb 集群部署
MySQL InnoDB Cluster 是最新GA的MySQL高可用方案,利用MySQL Router可以轻松搭建强壮的高可用方案。
MySQL Router 是访问路由转发中间件,提供应用程序访问的failover能力。
搭建MySQL InnoDB Cluster
这里准备了3台虚拟机mysql-1、mysql-2、mysql-3,IP分别为192.168.7.30、192.168.7.31、192.168.7.32。
配置主机映射
为保证三台虚拟机上可正常通过名称解析到对方的IP,配置DNS,或将主机名称映射写入hosts文件中。三台均操作
vim /etc/hosts
192.168.7.30 mysql-1 192.168.7.31 mysql-2 192.168.7.32 mysql-3
一、安装软件包
第一步是在三台虚拟机上均安装mysql-community-server
直接使用lnmp一键安装
wget http://soft.vpser.net/lnmp/lnmp1.8.tar.gz -cO lnmp1.8.tar.gz && tar zxf lnmp1.8.tar.gz && cd lnmp1.8 && ./install.sh lnmp
等待一会,安装完毕后,登录mysql,如下图表示安装成功
二、修改配置文件
vim /etc/my.cnf
#组复制配置 bind_address = 0.0.0.0 server_id=303306 #一般定义为你的机器ip的后几位加上数据库端口号 gtid_mode = ON #开启gitd复制 log_bin = bilog log_slave_updates = ON master_info_repository = TABLE relay_log_info_repository = TABLE transaction_write_set_extraction = XXHASH64 enforce_gtid_consistency = ON slave_preserve_commit_order = ON #确保GR_applier按照一致的顺序复现事务 binlog_checksum = NONE binlog_format=row loose-group_replication_group_name = a38e32fd-5fb6-11e8-ad7a-00259015d941 #UUID号,集群中要一致 #告诉插件使用地址为mysql-1,端口33061用于接受来自组中其他成员的传入连接 loose-group_replication_local_address = mysql-1:33061 #告诉插件使用地址为mysql-1,端口33061用于接受来自组中其他成员的传入连接 loose-group_replication_group_seeds =mysql-1:33061,mysql-2:33061,mysql-3:33061
#加入集群的白名单 loose-group_replication_ip_whitelist=mysql-1,mysql-2,mysql-3 loose-group_replication_start_on_boot = OFF #默认关闭, 防止重启后自动创建新的Group loose-group_replication_bootstrap_group = OFF #默认关闭, 防止自动创建新的Group #环境不干净,有本地事务,千万不要设置参数 loose-group_replication_allow_local_disjoint_gtids_join = OFF #在单主模式中为loose-group_replication_single_primary_mode=ON, loose-group_replication_enforce_update_everywhere_checks = OFF #在多主模式中为loose-group_replication_single_primary_mode = OFF,loose-group_replication_enforce_update_everywhere_checks = ON loose-group_replication_single_primary_mode = OFF loose-group_replication_enforce_update_everywhere_checks = ON read_only=OFF super_read_only=OFF
#这两个配置一定要加,不然会报错 report_host=mysql-1 report_port=3306
三个服务器一样的配置,只需要将上面标出红色字体(server_id,loose-group_replication_local_address,report_host)修改成当前服务器的地址即可
三、开启group_replication(均操作)
1.安装 group_replication
登录mysql:
[root@VM-0-16-centos /]# mysql -uroot -p
mysql> SET SQL_LOG_BIN=0; ##不记录二进制日志 mysql> alter user 用户名@'%' identified by '密码'; mysql> grant replication slave on *.* to 用户名@'%' identified by '密码'; mysql> flush privileges;
mysql> set sql_log_bin=1; ##记录二进制文件 mysql> change master to master_user='用户名',master_password='密码' for channel 'group_replication_recovery'; mysql> install plugin group_replication soname 'group_replication.so';
查看是否安装成功:show global variables like '%group%';
2.启动 group_replication
第1台服务操作,比其它服务多两条命令
mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=off;
其它服务,只需要一条命令
mysql> start group_replication;
查看是否成功:
mysql> select * from performance_schema.replication_group_members;
如果出现以上截图所示,那么恭喜你,搭建成功啦!
接下来就可以配置mysql 负载均衡啦,查看:https://www.cnblogs.com/fxd980519/articles/16195134.html
相关的sql命令
1.查看读写权限
mysql> show global variables like '%read_only%';
2.查询 binlog日志
mysql> show binary logs;
mysql> show binlog events in 'mysql-bin.000003';
搭建时的错误
先查看日志,lnmp安装的数据库,默认日志路径如下
[root@VM-0-5-centos ~]# tail -f /usr/local/mysql/var/VM-0-5-centos.err
错误1:
因为我是跨服务搭建,所以出现了外网请求不通问题,导致一直没有加入到集群中
"Timeout while waiting for the group communication engine to be ready!" "The group communication engine is not ready for the member to join. Local port: 33061"
解决:在每台服务器上,我都运行“ifconfig”来标识网络端点的名称。然后我运行了“ifcongig ntwk 00.00.00.00”:
[root@VM-0-5-centos ~]# ifconfig
en1 Link encap:Ethernet HWaddr 00:00:00:00:00:00 inet addr:00.00.00.00 Bcast:00.00.00.255 Mask:255.255.255.0 inet6 addr: 00::00:00:00:00/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:718094 errors:0 dropped:104 overruns:0 frame:0 TX packets:708888 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:666094518 (666.0 MB) TX bytes:493309981 (493.3 MB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:46526 errors:0 dropped:0 overruns:0 frame:0 TX packets:46526 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:13353180 (13.3 MB) TX bytes:13353180 (13.3 MB)
[root@VM-0-5-centos ~]# sudo ifconfig en1:1 AA.AAA.AA.A #(AA.AAA.AA.A表示公网地址)
配置好网络后,将hosts文件的 mysql-1,mysql-2,mysql-3修改成你的服务器的公网地址即可
错误2
其他节点修改数据报错,因为有本地事务和MGR组复制的gdit不一致导致的异常
3101, 'Plugin instructed the server to rollback the current transaction.'
通过命令:show binary logs,查看每个节点的日志文件是不一样的
解决:将所有的日志文件清空,再重启就好了,
第一台机器重启时还是先打开 :set global group_replication_bootstrap_group=ON,重启成功后再关闭
mysql> stop group_replication;
mysql> reset master;
mysql> start group_replication;