内容简介:所谓的MGR, 全称:因为之前的MySQL已经没有办法恢复起来, 实在没办法, 采取的方法是完全删除, 并重新安装、加入MGR参考文章
前言
所谓的MGR, 全称: MySQL Group Replication
, 是一种 MySQL 的主从架构。
因为之前的MySQL已经没有办法恢复起来, 实在没办法, 采取的方法是完全删除, 并重新安装、加入MGR
首先完整删除之前的MySQL
sudo apt-get remove mysql-* dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
然后安装完整版的MySQL
参考文章 Ubuntu 16.04安装MySQL官方最新“非阉割”版
注意:如果安装的不是完整版的, 在最后安装MGR插件就会遇到绕不过去的坑。
主要步骤:
- 到 MySQL官方的 Download MySQL APT Repository 页面下载
mysql-apt-config_*_all.deb
-
运行命令:
-
运行deb包:
sudo dpkg -i mysql-apt-config*
注意: 在这一步, 最好安装跟原来MySQL 一致的版本。 默认是8.0, 可以在弹出的对话框之中选择5.7
-
更新
sudo apt-get update
-
APT安装MySQL
sudo apt-get install mysql-server mysql-client
修改配置文件 – 数据目录
主要参考文章: DigitalOcean: How To Move a MySQL Data Directory to a New Location on Ubuntu 16.04
MySQL的数据目录默认位置: /var/lib/mysql/
注意: 在这里步骤还是比较麻烦的, 一不小心, 启动的时候就会报错:
Job for mysql.service failed because the control process exited with error code. See “systemctl status mysql.service” and “journalctl -xe” for details.
步骤:
1. 暂停MySQL 并将原来的数据目录复制到新的目录之中
运行命令:
# 暂停MySQL sudo systemctl stop mysql # 复制目录, -a 可以保持原来的权限, -v 就是verbose # 我们的目标目录完整路径:/data/mysql, 而不是 /data # 执行下面命令的时候,【不能】带最后的斜杠 sudo rsync -av /var/lib/mysql /data # 最后备份一下 sudo mv /var/lib/mysql /var/lib/mysql.bak
2. 配置文件修改数据目录
# 编辑文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 新增或者修改配置项: datadir=/data/mysql
注意: 这个时候还不能启动
3. 修改AppArmor
我也是第一次知道还有 AppArmor
这个东西存在
# 编辑对应的文件 sudo vim /etc/apparmor.d/tunables/alias # 添加相应的记录 alias /var/lib/mysql/ -> /data/mysql/, # 结尾的逗号不能少 # 重启AppArmor, 让改动生效 sudo systemctl restart apparmor
4. 创建空间文件, 绕过启动检查
MySQL有一个启动检查脚本
# /usr/share/mysql/mysql-systemd-start . . . if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then echo "MySQL data dir not found at /var/lib/mysql. Please create one." exit 1 fi if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then echo "MySQL system database not found. Please run mysql_install_db tool." exit 1 fi . . .
解决方案: 创建空文件夹即可:
sudo mkdir /var/lib/mysql/mysql -p
最终: 启动MySQL
sudo systemctl start mysql sudo systemctl status mysql
修改配置文件 – 加入MGR的配置
参考网址: https://blog.skyaid-service.org/2017/10/29/mgr_haproxy/
配置文件还是上面提到的 : /etc/mysql/mysql.conf.d/mysqld.cnf
带解说版本:
#为每个节点设定唯一id server_id=1 #开启全局事务id gtid_mode=ON enforce_gtid_consistency=ON #将复制的元数据存到系统表中,而不是文件中 master_info_repository=TABLE relay_log_info_repository=TABLE #打开binlog,行复制并且disable binlog checksum binlog_checksum=NONE log_slave_updates=ON log_bin=binlog binlog_format=ROW #对每个事务获取write set,并且用XXHASH64算法获取hash值 transaction_write_set_extraction=XXHASH64 #group的唯一名字 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #节点启动的时候不要自动启动组复制 loose-group_replication_start_on_boot=off #本节点的IP地址和端口,注意该端口是组内成员之间通信的端口,而不是MySQL对外提供服务的端口 loose-group_replication_local_address= "127.0.0.1:24901" #种子节点的IP和端口号,新成员加入到集群的时候需要联系种子节点,启动集群的节点不使用该选项。 loose-group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903" #是否启动集群 loose-group_replication_bootstrap_group= off 注意:该选项任何时候只能用于一个节点,通常情况下是启动集群的时候使用,启动之后需要关闭该选项。否则使用该选项启动多个节点,就会造成同名的多个Group,认为制造脑裂的场景。
实际配置的版本
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /data/mysql log-error = /var/log/mysql/error.log # By default we only accept connections from localhost bind-address = 0.0.0.0 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 server_id=3 gtid_mode=ON enforce_gtid_consistency=ON master_info_repository=TABLE relay_log_info_repository=TABLE binlog_checksum=NONE log_slave_updates=ON log_bin=binlog binlog_format=ROW transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=off loose-group_replication_local_address= "this_machine_ip:33061" loose-group_replication_group_seeds= "seeds_ip:33061" loose-group_replication_bootstrap_group= off
上面的配置完成之后, 就可以重启MySQL了
其他操作
1. 创建MGR用户
执行下面的脚本即可:
SET SQL_LOG_BIN=0; CREATE USER rpl_user@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1;
2. 安装MGR插件
# 安装 $ INSTALL PLUGIN group_replication SONAME 'group_replication.so' # 查看 $ show plugins; +----------------------------+----------+--------------------+----------------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+----------------------+---------+ | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL | +----------------------------+----------+--------------------+----------------------+---------+
加入集群
注意:
如果是集群刚开始启动, 需要执行的命令如下:
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
但是现在是加入原来有的集群, 所以只能执行下面这个命令:
START GROUP_REPLICATION;
补救: 如果不小心也把上面3个命令都执行了一次, 补救措施:
# 首先设置bootstrap group 为OFF # 从命名上看, bootstrap 也就是集群启动的时候才叫bootstrap SET GLOBAL group_replication_bootstrap_group=OFF; # 其次, 关闭GROUP_REPLICATION # 这个过程可能要等一会 STOP GROUP_REPLICATION; # 再次启动GROUP_REPLICATION START GROUP_REPLICATION;
此时如果再来看集群的状态, 可以看到, 已经处于 Recovering
的状态了
至此, 全流程完成
本文站在了前人的肩膀之上, 所参考的文章都已经列出出处。
各位转载的也请注明本博客的地址: https://www.flyml.net
以上所述就是小编给大家介绍的《重新安装MySQL并加入MGR集群》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- SLife 1.0 加入集群的配置和 Docker 化部署配置
- 欢迎加入 Cassandra 技术社区
- 不要为了期权加入创业公司,不值得
- 微软加入 OpenJDK,向 Java 靠拢
- Keka 1.2.11 发布,加入终端支持
- SpringBoot 如何加入 Prometheus & Grafana 監控
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。