groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown mysql:mysql -R /home/mysql-8.3.0-master
-下面这个授权是给MySQL默认的mysql.sock存放目次授权
chown mysql:mysql -R /tmp
f.mysql初始化:
【留意:虽然MySQL的初始化和启动也可以用系统的root用户进行,但正式部署时,为了安全性,应该单独为MySQL创建个系统用户来操作,比如上面创建的mysql用户和用户组】 (初始化时会生成密码,记得生存,比如:gLfOAkhG=7fT)
cd /home/mysql-8.3.0-master/bin --用mysql用户进行初始化
./mysqld --defaults-file=/home/mysql-8.3.0-master/my.cnf --user=mysql --initialize
g.启动与停止MySQL服务:
cd /home/mysql-8.3.0-master/bin -启动MySQL服务:
./mysqld --defaults-file=/home/mysql-8.3.0-master/my.cnf --user=mysql &
-停止MySQL服务:
./mysqladmin -u root -p shutdown
h.登录后修改root用户密码:
(留意:MySQL8.3登录后欺压要求先修改密码,否则不让做其他操作的) -登录:
./mysql -u root -p
(用初始化时的临时密码登录,比如:gLfOAkhG=7fT) -修改密码下令:
alter user 'root'@'localhost' identified by '8888';
i.登录后修改允许远程访问:
use mysql;
update user set host='%' where user='root';
flush privileges;
-登录
./mysql -h127.0.0.1 -P3312 -u root -p -修改密码下令:
alter user 'root'@'localhost' identified by '8888';
g.登录后修改允许远程访问:
use mysql;
update user set host='%' where user='root';
flush privileges;
MySQL InnoDB Cluster 安装与设置:
简介:
InnoDB Cluster 告急由MySQL Shell、MySQL Router和MySQL服务器集群组成,三者协同工作,共同为 MySQL 提供完整的高可用性解决方案。 InnoDB Cluster 以组复制为基础,集群中的每个 MySQL 服务器实例都是组复制的成员,提供了在 InnoDB Cluster 内复制数据的机制,而且具有内置的故障转移功能。 MySQL Group Replication(MGR),全称MySQL Group Replication,是由MySQL官方于2016年12月推出的一项全新的高可用性与高扩展性解决方案。 该解决方案旨在提供高可用、高扩展和高可靠的MySQL集群服务。
在MySQL Group Replication出现之前,用户通常接纳Master-Slave架构作为MySQL高可用性的告急方式。然而,随着业务需求的增长和发展,传统的Master-Slave架构可能会面对一些限定,例如单点故障和扩展性瓶颈。
MySQL 5.7版本开始支持无损半同步复制(lossless semi-synchronous replication),这一特性进一步提升了数据复制的强一致性。而MySQL Group Replication则在此基础上进一步发展,为用户提供了一种更为机动和可靠的数据库复制方案。
通过使用MySQL Group Replication,用户可以构建一个由多个MySQL实例组成的集群,这些实例可以相互协作,提供高可用性和扩展性,并保证数据的一致性和可靠性。
MySQL Group Replication接纳基于Paxos协议的一致性算法,确保了集群中的所有节点在任何时间都保持一致的数据状态。同时还提供了主动故障检测和规复机制,当集群中的某个节点发生故障时,集群可以主动进行故障切换,保证服务的持续可用性。 MySQL Shell 在 InnoDB Cluster 中充当控制台角色,使用它包罗的AdminAPI,可以使安装、设置、管理、维护多个MySQL组复制实例的工作更加轻松,通过AdminAPI的几条交互指令就可主动完成组复制设置。 MySQL Router 可以根据集群部署信息主动生成设置,将客户端应用程序透明地毗连到 MySQL 服务器实例。
假如服务器实例意外故障,聚集将主动重新设置。在默认的单主模式下,InnoDB Cluster 具有单个读写主服务器实例。
多个辅助服务器实例是主服务器实例的副本。假如主服务器出现故障,则辅助服务器将主动升级为主服务器。
MySQL Router 可以检测到这种情况并将客户端应用程序主动转发到新的主服务器。 为了得到最佳性能,MySQL Router通常与使用它的应用程序安装在同一主机上。
结构先容:
1.MySQL Servers
MySQL Group Replication,简称MGR, 是 MySQL 的主从同步高可用方案,包括数据同步及角色推举
内里有三个服务节点 (官网指定服务的节点数最少 3 个最多 9 个),假如过多或造成性能下降
1.1 其中有一个主节点,两个从节点
1.2 主节点可以进行读写操作,从节点只能进行读取操作
1.3 集群设置默认为单主模式,当然还可以设置成多主模式
-master root用户授权:
cd /home/mysql-8.3.0-master/bin
./mysql -u root -p
GRANT CLONE_ADMIN, CONNECTION_ADMIN, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;
-slave1 root用户授权:
cd /home/mysql-8.3.0-slave1/bin
./mysql -h127.0.0.1 -P3311 -u root -p
GRANT CLONE_ADMIN, CONNECTION_ADMIN, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;
-slave2 root用户授权:
cd /home/mysql-8.3.0-slave2/bin
./mysql -h127.0.0.1 -P3312 -u root -p
GRANT CLONE_ADMIN, CONNECTION_ADMIN, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;
b.MySQL Shell安装与启动
-下载地址:
https://dev.mysql.com/downloads/shell/ -文档地址:
https://dev.mysql.com/doc/mysql-shell/8.3/en/ -解压:
tar zxvf mysql-shell-8.3.0-linux-glibc2.17-x86-64bit.tar.gz -启动:
/home/mysql-shell-8.3.0-linux-glibc2.17-x86-64bit/bin/mysqlsh
-启动MySQL Shell后,首先毗连到MySQL主实例,我这里是端口为3310的实例:
\connect root@192.168.70.128:3310 -创建集群:
var cluster = dba.createCluster('clusterTest')
(clusterTest为集群名称) -检察集群状态:
cluster.status() -添加集群实例:
var cluster = dba.getCluster()
cluster.addInstance('root@192.168.70.128:3311')
cluster.addInstance('root@192.168.70.128:3312') 正常添加完实例后,检察集群状态如下:
可以看出来,3310为主实例,提供读写;3311和3312为从实例,为只读。
【留意1】:
添加实例下令会提示选择一种规复策略,用于决定实例如何规复与集群同步所需的事务。 这里提供了2种规复策略: [C]lone:克隆。会完全复制种子实例,而且会删除本实例与种子实例的差异。 [I]ncremental recovery:增量规复。会将种子实例中存在但本实例中不存在的数据同步到本实例,而且会保存本实例中存在但种子实例中不存在的数据。 [A]bort:取消导入。 这里会提示 (default Clone),即默认为克隆,可根据需求选择。 这里选择第一项克隆,输入C,然后回车即可。
若从实例只参与集群,不做其他用途,则可以选克隆;若从实例除了集群还有其他作用,则需要选择增量。 【留意2】: 实例添加到集群后,Shell会主动重启该MySQL实例,假如重启失败,则需要手动重启下被参加集群的MySQL服务。 【留意3】: 假如重启添加到集群的MySQL实例后,通过Shell毗连主实例执行cluster.status()时,有些实例出现以下错误:
...
"instanceErrors": [
"WARNING: Instance is not managed by InnoDB cluster. Use cluster.rescan() to repair.",
"ERROR: Invalid or missing information of Group Replication's network address in metadata. Use Cluster.rescan() to update the metadata."
],
... 则需要在主实例中执行下 cluster.rescan() 重新更新下集群元数据。 【留意4】: 假如通过Shell毗连主实例执行var cluster = dba.getCluster()时,出现以下错误:
Dba.getCluster: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is not active) (MYSQLSH 51314) 则需要毗连主实例后,重启下集群即可: dba.rebootClusterFromCompleteOutage()