centos7 安装mysql8_烹饪MySQL8.0 Cluster这道菜

368832979bd6f51bd37220fb7ec93599.png

此文将带领大家接触MySQL8.0版本,并且部署Mysql Cluster。香。香。香。

一:写在前面--MySQL8.0的改进

1:性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载、IO 密集型工作负载、以及高竞争("hot spot"热点竞争问题)工作负载。

9e0344f6cbb5efcc9955f4bcbaebf61c.png

MySQL8.0、MySQL5.7、MySQL5.7 性能对别

2:NoSQL:从MySQL 5.7 版本其开始提供 NoSQL 存储功能,目前在 8.0 版本中NoSQL功能也得到了更大的改进。

3:窗口函数(Window Functions):从 MySQL 8.0 开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中。即窗口函数不需要 GROUP BY。

4:隐藏索引:在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。

5:降序索引:MySQL 8.0 为索引提供按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序。

6:通用表表达式(Common Table Expressions CTE):在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰。

7:UTF-8 编码:从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。

8:JSON:MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。

9:可靠性:InnoDB 现在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。

10:高可用性(High Availability):InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。

11:安全性:对 OpenSSL 的改进、新的默认身份验证、SQL 角色、密码强度、授权。

二、接下来要干什么

1:基于Centos7.X 安装MySQL8.0数据库

2:基于3台Centos7.X 搭建Mysql Cluster

三、准备环境

1、服务器环境

基于VirtualBox的3台虚拟机。配置如下:

内存:1024M

硬盘:12G

网络:NAT

2:准备软件

CentOS-7-x86_64-Minimal-1908.iso

mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz

[下载地址:]

https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz

三:操作系统提前配置

1:设置3台Centos7的服务器IP地址与Hostname如下:

10.0.2.188 cook-node1

10.0.2.189 cook-node2

10.0.2.190 cook-node3

为操作系统设置ip地址与Hostname

29b3c1c15269079aca2769c9833dda9d.png

增加hosts解析

[root@cook-node1 ~]# vi /etc/hosts

8921fa97888e32d67178d00172da8f51.png

2:修改linux的系统配置

[root@cook-node1 ~]# vi /etc/security/limits.conf

增加

* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 

[root@cook-node1 ~]# vi /etc/security/limits.d/20-nproc.conf

#将*          soft    nproc     1024root       soft    nproc     unlimited#修改为*          soft    nproc     unlimitedroot       soft    nproc     unlimited

3:关闭linux的防火墙

f6f9ec56056f42f5003ff646cc457b09.png

4:卸载操作系统自带的MySQL数据库跟Mariadb数据库,Mariadb数据库是MySQL数据库的开源版,所以必须也卸载,否则会造成一定的冲突

61ef3478e70851b28f0a5cbfae822188.png

四:MySQL Cluster部署说明

6e603ec9beb53f6ece40450bd7ad4cb6.png

MySQL Cluster 1主2从结构

说明:

cook-node1为MySQL Cluster的主节点,主要负责数据写操作

cook-node2为MySQL Cluster的从节点1,主要负责数据的读操作

cook-node3为MySQL Cluster的从节点2,与cook-node2一样负责数据的读操作

同时:

在cook-node1中部署MySQL Router进行读写操作分离

9f6db74b1e763dadc990201475e17ef0.png

五:具体部署操作

1:将mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz、mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz文件上传到3个服务器节点中。

2:为部署用户新建用户操作系统用户:cook,以下所有部署操作均使用cook用户进行操作。

991554765e602c9190d51653a77968b8.png

3:对文件进行解压,重命名、规整好文件

0b2ae84079cca8571e5e1528fbcdd388.png

4:修改MySQL的配置文件my.cnf,放在/work/cook/mysql8.0/mysql-8.0.20/下

[mysqld]  character-set-server=utf8port=3306  socket=/tmp/mysql.sockbasedir=/work/cook/mysql8.0/mysql-8.0.20datadir=/work/cook/mysql8.0/mysql-8.0.20/datalog-error=/work/cook/mysql8.0/mysql-8.0.20/data/mysqld.logpid-file=/work/cook/mysql8.0/mysql-8.0.20/data/mysql.piduser=cooktmpdir=/tmpdefault-storage-engine=INNODBlower-case-table-names=1#复制框架server_id=1gtid_mode=ONenforce_gtid_consistency=ONmaster_info_repository=TABLErelay_log_info_repository=TABLEbinlog_checksum=NONElog_slave_updates=ONlog_bin=binlogbinlog_format=ROW#组复制设置#server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列transaction_write_set_extraction=XXHASH64#告知插件加入或创建组命名,UUIDloose-group_replication_group_name="f703d586-8d16-11ea-aa98-005090e3c222"#server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。loose-group_replication_start_on_boot=off#告诉插件使用IP地址,端口33061用于接收组中其他成员转入连接loose-group_replication_local_address="10.0.2.188:33061"#启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意loose-group_replication_group_seeds="10.0.2.188:33061,10.0.2.189:33061,10.0.2.190:33061"loose-group_replication_ip_whitelist="10.0.2.188,10.0.2.189,10.0.2.190"loose-group_replication_bootstrap_group=off# 使用MGR的单主模式loose-group_replication_single_primary_mode=onloose-group_replication_enforce_update_everywhere_checks=offdisabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE

5:执行mysql的安装命令

进入到MySQL的bin目录下,执行./mysqld --initialize-insecure --basedir=/work/cook/mysql8.0/mysql-8.0.20 --datadir=/work/cook/mysql8.0/mysql-8.0.20/data --lower-case-table-names=1

7cb3f1e891ee8e5a21b8a9a2c1f8f76a.png

如上图,即表示安装成功。

6:使用support-files/mysql.server进行mysql的启动,停止,重启等。

复制support-files/mysql.server文件到/work/cook/mysql8.0/mysql-8.0.20下,

编辑mysql.server文件,补充basedir与datadir对应的值

38df87ad3c12198d5e8949efc515d794.png

在/work/cook/mysql8.0/mysql-8.0.20/data/下新建mysql.pid文本文件。

执行:/work/cook/mysql8.0/mysql-8.0.20/mysql.server start即可启动MySQL8.0数据库

e6a2a220e9c967a562befaec295f1f2f.png

7:进入mysql命令行,设置root密码,增加admin用户

[cook@cook-node1 bin]$ ./mysql -uroot -pEnter password: Welcome to the MySQL monitor.  Commands end with ; or g.Your MySQL connection id is 8Server version: 8.0.20 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.mysql> alter user'root'@'localhost' IDENTIFIED BY 'admin_cluster-Pwd1';  Query OK, 0 rows affected (0.02 sec)mysql> create user 'admin'@'%' identified by 'root_cluster-Pwd1';Query OK, 0 rows affected (0.02 sec)mysql> grant all privileges on *.* to 'admin'@'%' with grant option;Query OK, 0 rows affected (0.01 sec)

以上操作,cook-node1节点的MySQL已经运行成功。

8:可直接将/work/cook/mysql8.0/mysql-8.0.20文件夹打包,复制到其他两个节点中,进行快速配置。快速配置时,注意修改my.cnf中的

server_id=1修改为server_id=2、server_id=3

loose-group_replication_local_address="10.0.2.188:33061"

对应修改为loose-group_replication_local_address="10.0.2.189:33061"

loose-group_replication_local_address="10.0.2.190:33061"

9:通过以上8个步骤,即可把3个节点的mysql单独运行起来,接下来即可创建mysql cluster的集群了

10:选择10.0.2.188为mysql-shell的管理节点,通过mysql-shell进行集群管理

将mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz解压,并且重名为mysql-shell-8.0.20,放在/work/cook/mysql8.0下

eed82a919ff4ddc015c1f8eb33bd4048.png

进入/work/cook/mysql8.0/mysql-shell-8.0.20/bin,

通过./mysqlsh --uri admin@10.0.2.188:3306 链接到集群控制中,

通过var cluster = dba.createCluster('cookMysqlCluster');可新建一个名为cookMysqlCluster的集群。如下图。

c21061526f5fd455fae77101ba2889b9.png

执行完以上命令后,可通过cluster.status();查看集群状态

7e78419162ce34d65dbecc8033e6fc54.png

增加第二个几点:10.0.2.189:3306

可通过以下命令增加:cluster.addInstance('admin@10.0.2.189:3306');

如下图:

cc132b12b2044f93e37d1f958403c70f.png

增加集群节点错

通过以上命令,会出现增加集群节点出错。原因是,我们的10.0.2.189:3306的mysql服务是通过复制了10.0.2.188:3306的mysql服务部署的,故存在server-uuid重复,只需要把10.0.2.189:3306的mysql服务中/work/cook/mysql8.0/mysql-8.0.20/data/auto.cnf文件删除,再重新启动mysql服务即可。

删除完10.0.2.189:3306的auto.cnf文件后,再次执行cluster.addInstance('admin@10.0.2.189:3306');即可。

53492b2b9ae93d40ebc46008b2b42af5.png

再次通过cluster.status();查看集群状态

992adcc85f9f61527cbb8709808b2f0a.png

采用相同的方式,删除10.0.2.190:3306的auto.cnf文件,重启mysql服务。再通过cluster.addInstance('admin@10.0.2.190:3306');增加该集群节点。

f27090a6609a872a9a6c891a04ab9138.png

最后再次执行cluster.status();查看集群状态。

67ccf3fba4f5a773b991ea31d486ec2f.png

以上操作,mysql cluster进群即可创建完成。

六:集群验证。

在10.0.2.188:3306中新建数据库,cluster_test_db; 再在10.0.2.189:3306、10.0.2.190:3306数据库中查看是否存在该数据库。

验证如下:

4461455f78ad88c669679456b7ab80b8.png

10.0.2.188:3306 节点新建cluster_test_db

a50b70180d17a5e6998179dae86b63fb.png

10.0.2.189:3306 上查看到cluster_test_db

373e0976e0cae3c3822b3ff2e8375e2c.png

10.0.2.190:3306 上查看到cluster_test_db

以上操作,即可验证集群之间数据同步。

七:总结

以上内容,完成了Mysql Cluster的基本部署的操作。但是对该集群的玩弄还不止以上内容。

对有兴趣的同学,可基于该文章的操作,继续进行集群节点增删,集群故障模拟等操作。本文将不再继续。

最后,祝福所有有梦想的人。祝福所有为生活而奋斗的人。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值