1 | 作者: 夜泊1990 |
如果网址登陆不上去,可以发邮件或者企鹅号联系我
第一章 MySQL单点安装
1 | 此笔记讲解的是MySQL在Linux服务器(Centos7.x)上面的安装教程 |
第1节 系统需求
1 | 在Linux服务器上安装之前首先要对Linux服务器做一些设置 |
第2节 MYSQL下载
1 | 对于程序员来下载软件尽量去官网,我们使用的软件大多都是开源免费的,如果在网络上随便下载,可能软件里被集成了其他的东西所以慎重. |
- 下载地址
1
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
第3节 MYSQL安装
- 官网安装文档
1
https://dev.mysql.com/doc/refman/8.0/en/binary-installation.html
- 安装前的准备
1
2
3
4
51. 根据官网文档,如果本机以前安装过MYSQL需要卸载
2. 如果没有安装过MYSQL,我的当前的版本Linux在/etc文件夹下也会有一个my.cnf的mysql配置文件,需要删掉(当前etc文件夹下关于mysql的都需要删掉)
3. MYSQL安装需要依赖libaio库,所以需要安装这个库 yum install libaio
注意:如果在Oracle Linux 8和Red Hat 8这两个系统上面安装MYSQL,需要安装ncurses-compat-libs库(yum install ncurses-compat-libs) - 安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91注意: 严格按照下面步骤来,不允许任意修改安装路径以及文件的命名方式
1. 创建MYSQL服务器运行的用户名和群组(MYSQL服务器运行需要自己的用户名和群组而非root)
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
2. 将下载的mysql压缩包复制到/usr/local文件夹下(Linux的默认安装路径(官网指定),有点像我们window的Program Files)
shell> cp 源文件 目标目录
shell> cp /home/hs/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz /usr/local/
3. 将/usr/local下的mysql压缩包解压(压缩包后缀为xz)
shell> tar -xvJf mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
4. 将解压之后的文件夹重命名为mysql(如果不修改可以试试,后面会不会报错,如果报错仔细读一下错误消息)
shell> mv mysql-8.0.23-linux-glibc2.12-x86_64 mysql
5. 在mysql文件夹下创建mysql-files文件夹
shell> mkdir mysql-files
6. 使用chown命令修改mysql-files文件的拥有者
shell> chown mysql:mysql mysql-files
7. 使用chmod命令修改mysql-files文件的权限
shell> chmod 750 mysql-files
8. 初始化安装(这里会生成一个初始化密码,记住)
shell> bin/mysqld --initialize --user=mysql
9. 生成SSL和RSA文件(提高通信安全)
shell> bin/mysql_ssl_rsa_setup
10. 启动mysql服务
shell> bin/mysqld_safe --user=mysql &
MYSQL启动之后使用 ps -ef | grep mysql 命令查看是否启动成功,如果启动成功,可以使用mysql命令登陆
shell> bin/mysql -uroot -p 密码在第8步的初始化安装的时候生成
使用命令登陆成功之后,MYSQL服务会提示你重新修改密码,修改命令为
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
11. 设置开机启动(在Linux服务器重启时,MYSQL服务器会自动开机启动)
11.1 第1步要将support-files文件夹下的mysql.server文件复制到/etc/init.d目录下
shell> cp support-files/mysql.server /etc/init.d/mysql.server
11.2 第2步查看/etc/init.d/mysql.server文件有没有执行权限,如果没有需要添加执行权限
shell> chmod +x /etc/init.d/mysql.server
11.3 将mysql启动脚本加入到服务列表
shell> chkconfig --add mysql.server
11.4 查看是否mysql启动脚本是否添加成功
shell> chkconfig --list
如果显示类似于以下的列表为成功(有可能是英文)
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
mysql.server 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
------------------------------------------------------------------------------
注意: mysql.server这一行的3,4,5如果为开(英文为ON),说明开机启动设置成功,否则使用命令设置
shell> chkconfig --level 345 mysql on
12. 重新启动Linux服务器验证是否成功
shell> reboot
13. 修改root用户的host值
root用户的的host值默认为localhost也就是说除了127.0.0.1和localhost可以访问当前数据库,其他的地址都不能访问,所以修改root用户的host为%,就可以任意主机访问了
14. 如果有必要可以设置MYSQL的环境变量,这样操作起来更方便(不重要)
第二章 MYSQL集群安装(HA)
1 | MYSQL的官网提供了HA(高可用)的解决方案 |
第1节 系统需求
- MYSQL InnoDB Cluster协同原理图
- 协同原理图介绍
1
2
3
4
5
6
7
8
9
10
11
12上图为官网提供的协同工作原理图,由图可以看出里面共有6个服务节点(每一个方块都可以看成一台服务器)
1. Client App(MYSQL Connector),这个节点部署的是项目(非重点,和本章课程无关,可以看成是操作数据库的Java项目)
2. MySQL Shell(Cluster Admin) MYSQL客户端,用于管理和配置集群(重要)
3. MySQL Router节点,主要进行请求路由,将客户端发送过来的请求路由到不同的MYSQL服务器节点(重要)
4. MySQL Servers里面有三个服务节点(官网指定服务的节点数最少3个最多9个),如果过多或造成性能下降
4.1 其中有一个主节点,两个从节点
4.2 主节点可以进行读写操作,从节点只能进行读取操作
4.3 集群设置默认为单主模式,当然还可以设置成多主模式 - MySQL InnoDB Cluster安装前需求
1
2
3
4
5
6
7
8
9
10
11
12
13
141. 根据原理图我们需要准备5台Linux服务器
1.1 3个MySQL实例服务(3台)
1.2 MySQL Shell 服务(1台)
1.3 MySQL Router服务(1台) //节约硬件资源,我这里将MySQL Shell和MySQL Router安装在一台服务器上面.
2. 首先就是准备3台服务器,在每一台服务器上面都需要安装MySQL服务,安装方式看第一章MySQL单点安装
2.1 安装好MySQL服务器之后需要做一些设置
-> 设置MySQL的root账户的初始化密码(保证三个机器的密码设置成相同的)
-> 设置root账户的host为%,这样就可以任意其他机器都可以访问
-> 设置Linux服务器的防火墙(关闭并且禁用)
3. 禁用SELinux
3.1 查看当前SELinux的状态 命令为: sestatus
3.2 禁用方式,修改/etc/selinux/config里面的SELINUX=disabled即可
以上就是配置前的基础准备工作(重启一下服务器)
第2节 MySQL Shell介绍
1 | MySQL集群的管理客户端,用户对MySQL集群的配置和管理 |
- 下载地址
1
https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.23-linux-glibc2.12-x86-64bit.tar.gz
第3节 MySQL Shell安装
- 安装需求
1 | 1. MySQL Shell支持 JavaScript,Python,SQL脚本,在8.0.18版本之前必须保证当前的Linux操作系统安装了Python 2.7,如果没有需要自行安装 |
- 安装/启动步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
251. 将下载的压缩包复制到/usr/local目录下(个人习惯将文件安装到这个目录)
shell> cp /home/hs/mysql-shell-8.0.23-linux-glibc2.12-x86-64bit.tar.gz /usr/local/
2. 解压mysql-shell-8.0.23-linux-glibc2.12-x86-64bit.tar.gz
shell> tar -zxvf mysql-shell-8.0.23-linux-glibc2.12-x86-64bit.tar.gz
3. 将解压之后的mysql-shell-8.0.23-linux-glibc2.12-x86-64bit重命名为mysql-shell
shell> mv mysql-shell-8.0.23-linux-glibc2.12-x86-64bit mysql-shell
4. 启动命令在mysql-shell/bin目录下
4.1 启动:
shell> /usr/local/mysql-shell/bin/mysqlsh
4.2 设置环境变量方便操作(将下面的这句话设置到/etc/profile文件最下面即可)
export PATH=/usr/local/mysql-shell/bin:$PATH
设置完成环境变量需要使用命令让配置生效 source /etc/profile
以上 MySQL Shell安装完成
第4节 MySQL Shell的常用命令/函数
4.1 连接MySQL服务器
- 方式一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
521. 直接在命令行打mysqlsh命令进入mysql-shell交互模式(默认是JavaScript交互模式,可以切换模式)
shell> mysqlsh
2. 在交互模式中使用 shell.connect('root@192.168.1.131:3306') 连接MySQL服务器
2.1 shell : JS的核心对象
2.2 connect : 连接方法,参数是MySQL服务器的地址
注意事项:
1. 如果MySQL服务器的主机防火墙没有关闭,连接失败
2. 如果MySQL的root用户的host没有设置成%,连接失败
连接时会出现类似于下面的样式,因为连接MySQL需要输入MySQL服务器的密码
MySQL JS > shell.connect('root@192.168.1.131:3306')
Creating a session to 'root@192.168.1.131:3306'
Please provide the password for 'root@192.168.1.131:3306': ****
连接成功之后会出现类似于下面的交互模式,可以看出默认也是JS交互模式
MySQL 192.168.1.131:3306 ssl JS >
3. 切换交互模式
3.1 MySQL Shell提供了三种脚本语言的交互模式 JS、Pyhton、SQL
3.2 切换方式使用斜线加上语言所写
eg: 切换到python模式
MySQL 192.168.1.131:3306 ssl JS > \py
切换后
Switching to Python mode...
MySQL 192.168.1.131:3306 ssl Py >
-----------------------------------------------------------------------------
eg: 切换到SQL
MySQL 192.168.1.131:3306 ssl Py > \sql
切换后
Switching to SQL mode... Commands end with ;
MySQL 192.168.1.131:3306 ssl SQL >
-----------------------------------------------------------------------------
eg: 切换到JS
MySQL 192.168.1.131:3306 ssl SQL > \js
切换后
Switching to JavaScript mode...
MySQL 192.168.1.131:3306 ssl JS > - 方式二
1
2
3
4
5
6
7采用直接连接的方式,如果想要连接那个MySQL实例直接使用命令而不是需要shell.connect()函数
shell> mysqlsh -h192.168.1.131 -P3306 -uroot -p
Please provide the password for 'root@192.168.1.131:3306': ****(输入密码)
就会直接连接上MySQL服务器
MySQL 192.168.1.131:3306 ssl JS > - 方式三
1 | MySQL JS > \c "root@192.168.1.131:3306" |
- 退出交互模式
1
2
3
4
5方式一
MySQL 192.168.1.131:3306 ssl JS > \q
方式二
MySQL 192.168.1.131:3306 ssl JS > \quit
4.2 操作数据库(库、表、数据)
1 | 操作MySQL数据库需要进去SQL交互模式,进入之后正常使用SQL语言即可,这里不做介绍 |
4.3 检查MySQL服务器是否符合设置集群的标准
1 | 我这里的校验在JS的交互模式下进行 |
1 | MySQL 192.168.1.131:3306 ssl JS > dba.checkInstanceConfiguration() |
- 如果MySQL服务器满足要求会打印出类似于下面这样的文字
1 | Validating MySQL instance at node1:3306 for use in an InnoDB cluster... |
- 如果MySQL服务器不满足要求会打印出类似于下面这样的文字
1 | MySQL 192.168.1.100:3306 ssl JS > dba.checkInstanceConfiguration() |
4.4 将不满足配置集群的MySQL实例配置成满足的
- 方式一
1
方式一就是上面介绍的那种方式,手动的在my.cnf中修改配置,让其MySQL实例满足集群要求.
- 方式二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36MySQL官网提供了一个函数,可以直接调用函数修改MySQL实例的默认配置,让其满足集群配置要求.
函数为:dba.configureInstance();
//在MySQL Shell交互模式输入此函数,在执行过程中会让我们输入2次y进行确认,然后就是等待MySQL服务器重启.
MySQL 192.168.1.100:3306 ssl JS > dba.configureInstance()
Configuring MySQL instance at localhost.localdomain:3306 for use in an InnoDB cluster...
This instance reports its own address as localhost.localdomain:3306
Clients and other cluster members will communicate with it through this address by default. If this is not correct, the report_host MySQL system variable should be changed.
applierWorkerThreads will be set to the default value of 4.
NOTE: Some configuration options need to be fixed:
+----------------------------------------+---------------+----------------+--------------------------------------------------+
| Variable | Current Value | Required Value | Note |
+----------------------------------------+---------------+----------------+--------------------------------------------------+
| binlog_transaction_dependency_tracking | COMMIT_ORDER | WRITESET | Update the server variable |
| enforce_gtid_consistency | OFF | ON | Update read-only variable and restart the server |
| gtid_mode | OFF | ON | Update read-only variable and restart the server |
| server_id | 1 | <unique ID> | Update read-only variable and restart the server |
| slave_parallel_type | DATABASE | LOGICAL_CLOCK | Update the server variable |
| slave_preserve_commit_order | OFF | ON | Update the server variable |
+----------------------------------------+---------------+----------------+--------------------------------------------------+
Some variables need to be changed, but cannot be done dynamically on the server.
Do you want to perform the required configuration changes? [y/n]: y
Do you want to restart the instance after configuring it? [y/n]: y
Configuring instance...
The instance 'localhost.localdomain:3306' was configured to be used in an InnoDB cluster.
Restarting MySQL...
NOTE: MySQL server at localhost.localdomain:3306 was restarted.
待MySQL服务器重启完成之后,在MySQL Shell中检查当前的MySQL服务器是否符合MySQL集群的要求就会发现可以满足了,这种方式比较简单,方便.
4.5 创建集群
4.5.1 创建集群前准备
1 | 1. 现在保证有三台安装了MySQL服务器节点 |
为了方便主机进行连接,我们将这4台主机的IP地址映射成主机名字
主机名称 | 主机地址 | 备注 |
---|---|---|
node1 | 192.168.1.100(IP地址为自己的主机地址) | MySQL |
node2 | 192.168.1.101(IP地址为自己的主机地址) | MySQL |
node3 | 192.168.1.102(IP地址为自己的主机地址) | MySQL |
node4 | 192.168.1.103(IP地址为自己的主机地址) | MySQL Shell、MySQL Router |
设置hosts(/etc/hosts)
1 | 192.168.1.103 node1 |
设置好hosts之后使用MySQL Shell进行登陆就不需要在使用IP地址
1 |
|
4.5.2 集群创建操作
1 | 1. 使用MySQL Shell管理客户端连接任意一台MySQL服务器,作为集群的主节点,在这个节点上执行创建命令 |
4.6 获取集群
1 | 如果在执行创建集群的命令(var cluster = dba.createCluster('myCluter'))没有声明变量 |
4.7 向集群中添加子节点
1 |
|
4.8 如果MySQL集群节点出现故障
4.8.1 全部出现故障
1 | 如果MySQL服务节点全部挂掉,那么在重新启动MySQL服务器之后,集群不会自动恢复,恢复步骤 |
4.8.2 某一台出现故障
- 主节点出现故障
1
如果主节点出现故障,那么从节点会升级成主节点,待挂掉的主节点重新启动之后会自动连接进集群中,在单主中,他就会变成从节点
- 从节点出现故障
1
2
3
4
5
6如果从节点出现故障,他就会从集群中退出,但是在重启之后,会自动重新加入到集群中
注意如果节点不自动加入到集群中,官网提供了rejoinInstance("实例地址")函数
MySQL node2:3306 ssl JS > cluster.rejoinInstance("实例地址")
4.8.3 解散集群
1 | MySQL node2:3306 ssl JS > cluster.dissolve() |
4.8.5 集群模式切换
1 | 上面所创建的集群默认为单主模式集群,MySQL官网提供了另外一种设计集群的方式(多主模式),设置多主模式非常简单,官网提供了两种模式切换的API,可以轻松在两种模式中进行切换 |
第5节 MySQL Router路由
1 | MySQL集群已经配置完成,接下来配置MySQL的路由(轻量级的MySQL的中间件) |
5.1 下载地址
1 | https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.23-linux-glibc2.12-x86_64.tar.xz |
5.2 安装和环境变量配置
- 安装步骤
1
2
3
4
5
6
7
8
9
10
11
12二进制安装非常简单:
1. 将下载的压缩包复制到/usr/local
2. 解压
tar -Jxvf mysql-router-8.0.23-linux-glibc2.12-x86_64.tar.xz
3. 重命名 mv mysql-router-8.0.23-linux-glibc2.12-x86_64 mysql-router
安装完成 - 环境变量配置
1
2
3
4
5
6
7
8
9环境变量配置
export export PATH=/usr/local/mysql-router/bin:$PATH
环境变量配置完成之后可以执行 mysqlrouter --version 查看一下版本信息
执行 mysqlrouter --help 查看一下帮助文件,里面介绍了MySQL Router的使用方式
5.3 配置文件自动生成
1 | 上面配置完成之后,可以使用命令查看当前MySQL集群被哪一个路由连接.查看命令为 |
1 | # mysqlrouter: 启动router路由命令 |
5.4 启动MySQL Router
1 | 命令: |