2 MySQL 安装和基本使用
2.1 MySQL 介绍
2.1.1 MySQL 历史
1979 年:TcX 公司 Monty Widenius,Unireg
1996 年:发布 MySQL1.0,Solaris 版本,Linux 版本
1999 年:MySQL AB 公司,瑞典
2003 年:MySQL 5.0 版本,提供视图、存储过程等功能
2008 年:Sun 公司 以 10 亿美元收购 MySQL
2009 年:Oracle 公司以 75 亿美元收购 sun 公司
2009 年:Monty 成立 MariaDB
2.2.2 MySQL 系列
2.2.2.1 MySQL 的三大主要分支
- mysql
- mariadb
- percona Server
2.2.2.2 官方网址
2.2.2.3 官方文档
2.2.2.4 版本演变
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.1 -->5.5 -->10.0--> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5
MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了,后来被Oracle收购后,终于迎来了像样的5.6版本,之后就是5.7、8.0版本。由于6.0版本号已被用过,7.x系列版本专用于NDB Cluster,因而新版本号从8.0开始。
2.2.3 MySQL 的特性
- 开源免费
- 插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5 开始 innoDB 引擎是 MYSQL 默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
- 单进程,多线程
#判断多线程
[09:57:23 root@centos8 ~]#grep -i threads /proc/1074/status
Threads: 39
- 诸多扩展和新特性
- 提供了较多测试组件
2.2 MySQL 安装方式介绍和快速安装
2.2.1 安装方式介绍
- 程序包管理器管理的程序包
- 源代码编译安装
- 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
2.2.2 RPM 包安装 MySQL
CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/
Index of /mysql/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
CentOS 8:安装光盘直接提供
- mysql-server:8.0
- mariadb-server : 10.3.17
CentOS 7:安装光盘直接提供
- mariadb-server:5.5 服务器包
- mariadb 客户端工具包
CentOS 6:
- mysql-server:5.1 服务器包
- mysql 客户端工具包
范例: CentOS 7 安装 MySQL5.7
[10:54:25 root@centos7 ~]#cat /etc/yum.repos.d/mysql57.repo
[mysql57]
name=mysql57
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
[10:55:08 root@centos7 ~]#yum list | grep mysql57
mysql-community-client.i686 5.7.33-1.el7 mysql57
mysql-community-client.x86_64 5.7.33-1.el7 mysql57
mysql-community-common.i686 5.7.33-1.el7 mysql57
mysql-community-common.x86_64 5.7.33-1.el7 mysql57
mysql-community-devel.i686 5.7.33-1.el7 mysql57
mysql-community-devel.x86_64 5.7.33-1.el7 mysql57
mysql-community-embedded.i686 5.7.33-1.el7 mysql57
mysql-community-embedded.x86_64 5.7.33-1.el7 mysql57
mysql-community-embedded-compat.i686 5.7.33-1.el7 mysql57
mysql-community-embedded-compat.x86_64 5.7.33-1.el7 mysql57
mysql-community-embedded-devel.i686 5.7.33-1.el7 mysql57
mysql-community-embedded-devel.x86_64 5.7.33-1.el7 mysql57
mysql-community-libs.i686 5.7.33-1.el7 mysql57
mysql-community-libs.x86_64 5.7.33-1.el7 mysql57
mysql-community-libs-compat.i686 5.7.33-1.el7 mysql57
mysql-community-libs-compat.x86_64 5.7.33-1.el7 mysql57
mysql-community-server.x86_64 5.7.33-1.el7 mysql57
mysql-community-test.x86_64 5.7.33-1.el7 mysql57
[10:55:17 root@centos7 ~]#yum install mysql-community-server -y
[11:00:53 root@centos7 ~]#systemctl enable --now mysqld
[11:04:08 root@centos7 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 80 [::]:3306 [::]:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
[11:04:26 root@centos7 ~]#mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[11:05:15 root@centos7 ~]#grep password /var/log/mysqld.log
2021-01-28T03:04:05.376619Z 1 [Note] A temporary password is generated for root@localhost: j9eNwN#IsToD
2021-01-28T03:05:15.225574Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
#修改初始密码方法1
[11:37:14 root@centos7 ~]#mysql -uroot -p'j9eNwN#IsToD'
mysql> alter user root@'localhost' identified by 'Zhangzhuo@0705';
Query OK, 0 rows affected (0.00 sec)
mysql> status
#修改初始密码方法2
[11:38:28 root@centos7 ~]#mysqladmin -uroot -p'j9eNwN#IsToD' password 'Zhangzhuo@0705'
范例:centos7 安装 Mariadb
[11:42:44 root@centos7 ~]#cat /etc/yum.repos.d/mariadb.repo
[mariadb105]
name=mariadb105
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos/7/x86_64/
gpgcheck=0
[11:47:06 root@centos7 ~]#yum install -y MariaDB-server
[11:47:43 root@centos7 ~]#systemctl enable --now mariadb.service
[11:48:08 root@centos7 ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.8-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> status
------------------------
mysql Ver 15.1 Distrib 10.5.8-MariaDB, for Linux (x86_64) using readline 5.1
Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.5.8-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 18 sec
Threads: 2 Questions: 4 Slow queries: 0 Opens: 16 Open tables: 10 Queries per second avg: 0.222
2.3 初始化脚本提高安全性
运行脚本:mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库
2.4 MYSQL 组成
2.4.1 客户端程序
- mysql: 交互式或非交互式的 CLI 工具
- mysqldump:备份工具,基于 mysql 协议向 mysqld 发起查询请求,并将查得的所有数据转换成 insert 等写操作语句保存文本文件中
- mysqladmin:基于 mysql 协议管理 mysqld
- mysqlimport:数据导入工具
MyISAM 存储引擎的管理工具:
- myisamchk:检查 MyISAM 库
- myisampack:打包 MyISAM 表,只读
2.4.2 服务器端程序
- mysqld_safe
- mysqld
- mysqld_multi 多实例 ,示例:mysqld_multi --example
2.4.3 用户账号
mysql 用户账号由两部分组成:
'USERNAME'@'HOST'
说明:
HOST 限制此用户可通过哪些远程主机连接 mysql 服务器
支持使用通配符:
% 匹配任意长度的任意字符,相当于shell中*, 示例: 172.16.0.0/255.255.0.0 或 172.16.%.%
_ 匹配任意单个字符,相当于shell中?
2.4.4 mysql 客户端命令
2.4.4.1 mysql 运行命令类型
- 客户端命令:本地执行,每个命令都完整形式和简写格式
mysql> \h, help
mysql> \u,use
mysql> \s,status
mysql> \!,system
- 服务端命令:通过 mysql 协议发往服务器执行并取回结果,命令末尾都必须使用命令结束符号,默认为分号
#示例:
mysql>SELECT VERSION();
2.4.4.2 mysql 使用模式
- 交互模式
- 脚本模式:
mysql -uUSERNAME -pPASSWORD < /path/somefile.sql
cat /path/somefile.sql | mysql -uUSERNAME -pPASSWORD
mysql>source /path/from/somefile.sql
2.4.4.3 mysql 命令使用格式
mysql [OPTIONS] [database]
mysql 客户端常用选项:
-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e “SQL“ 执行SQL命令
-V, --version 显示版本
-v --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置
登录系统:
[11:50:57 root@centos7 ~]#mysql -uroot -p123456 #默认不写空密码
运行 mysql 命令:
mysql>use mysql
mysql> select user();
mysql>SELECT User,Host,Password FROM user;
范例:mysql 的配置文件,修改提示符
[12:30:27 root@centos7 ~]#vim /etc/my.cnf
#添加这行
[mysql]
prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
[12:30:27 root@centos7 ~]#mysql -uroot -p'Zhangzhuo@0705'
12:31:06(root@localhost) [(none)]>
范例:配置所有 MySQL 客户端自动登录
[12:35:05 root@centos7 ~]#vim /etc/my.cnf
[client]
user=root
password=Zhangzhuo@0705
2.4.4.4 mysqladmin 命令
mysqladmin 命令格式
mysqladmin [OPTIONS] command command....
范例:
#查看mysql服务是否正常,如果正常提示mysqld is alive
[12:36:10 root@centos7 ~]#mysqladmin -uroot -p'Zhangzhuo@0705' ping
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqld is alive
#关闭mysql服务,但mysqladmin命令无法开启
[12:36:30 root@centos7 ~]#mysqladmin -uroot -p'Zhangzhuo@0705' shutdown
#创建数据库testdb
[12:37:39 root@centos7 ~]#mysqladmin -uroot -p'Zhangzhuo@0705' create testdb
#删除数据库testdb
[12:38:21 root@centos7 ~]#mysqladmin -uroot -p'Zhangzhuo@0705' drop testdb
#修改root密码
[12:39:26 root@centos7 ~]#mysqladmin -uroot -p'Zhangzhuo@0705' password 'Admin@123'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
[12:39:33 root@centos7 ~]#mysqladmin -uroot -p'Admin@123' flush-logs
2.4.4.5 服务器端配置
服务器端(mysqld):工作特性有多种配置方式
- 命令行选项:
- 配置文件:类 ini 格式,集中式的配置,能够为 mysql 的各应用程序提供配置信息
服务器端配置文件:
- /etc/my.cnf #Global 选项
- /etc/mysql/my.cnf #Global 选项
- ~/.my.cnf #User-specific 选项
配置文件格式:
- [mysqld]
- [mysqld_safe]
- [mysqld_multi]
- [mysql]
- [mysqldump]
- [server]
- [client]
格式:
parameter = value
说明:
_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同,无区分大小写
2.4.4.6 socket 地址
服务器监听的两种 socket 地址:
- ip socket: 监听在 tcp 的 3306 端口,支持远程通信 ,侦听 3306/tcp 端口可以在绑定有一个或全部接口 IP 上
- unix sock: 监听在 sock 文件上,仅支持本机通信, 如:/var/lib/mysql/mysql.sock)说明:host 为 localhost 时自动使用 unix sock
2.4.4.7 关闭 mysqld 网络连接
只侦听本地客户端, 所有客户端和服务器的交互都通过一个 socket 文件实现,socket 的配置存放
在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf 修改
范例:
vim /etc/my.cnf
[mysqld]
skip-networking=1 #表示关闭网络连接1关闭0开启
bind_address=127.0.0.1 #绑定端口
2.5 通用二进制格式安装 MySQL
2.5.1 准备用户
[12:48:56 root@centos7 ~]#useradd -r -s /sbin/nologin -d /data/mysql mysql
2.5.2 准备数据目录,建议使用逻辑卷
#可选做,后面的脚本mysql_install_db可自动生成此目录
[12:50:20 root@centos7 ~]#mkdir -p /data/mysql
[12:50:24 root@centos7 ~]#chown mysql: /data/mysql/
2.5.3 准备二进制程序
[13:56:35 root@centos7 ~]#tar xvf mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[13:56:35 root@centos7 ~]#cd /usr/local/
[13:57:43 root@centos7 local]#ln -sv mysql-5.6.50-linux-glibc2.12-x86_64 mysql
[13:58:14 root@centos7 local]#chown -R root: /usr/local/mysql
2.5.4 准备配置文件
[14:16:18 root@centos7 mysql]#cd /usr/local/mysql
[14:16:20 root@centos7 mysql]#cp -d support-files/my-default.cnf /etc/my.cnf
[14:17:54 root@centos7 mysql]#vim /etc/my.cnf
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on #在mariadb5.5以上版的是默认值,可不加
skip_name_resolve = no #禁止主机名解析,建议使用
2.5.5 创建数据库文件
[14:21:09 root@centos7 mysql]#./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[14:28:12 root@centos7 mysql]#ls /data/mysql/ -l
total 110600
-rw-rw---- 1 mysql mysql 12582912 Jan 28 14:28 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jan 28 14:28 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jan 28 14:28 ib_logfile1
drwx------ 2 mysql mysql 4096 Jan 28 14:28 mysql
drwx------ 2 mysql mysql 4096 Jan 28 14:28 performance_schema
drwx------ 2 mysql mysql 6 Jan 28 14:27 test
2.5.6 准备服务脚本,并启动服务
[14:28:17 root@centos7 mysql]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[14:28:58 root@centos7 mysql]#chkconfig --add mysqld
[14:29:22 root@centos7 mysql]#service mysqld start
#如果有对应的service 文件可以执行下面
cp /usr/local/mysql/support-files/systemd/mariadb.service
/usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable --now mariadb
2.5.7 PATH 路径
[14:30:50 root@centos7 mysql]#echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
[14:32:09 root@centos7 mysql]#. /etc/profile.d/mysql.sh
2.5.8 安全初始化
[14:34:03 root@centos7 mysql]#mysql_secure_installation
2.6 实战案例:一键安装 mysql-5.6 二进制包的脚本
2.6.1 离线安装 mysql-5.6 二进制包的脚本
2.6.2 在线安装 mysql-5.6 二进制包的脚本
2.7 实战案例:二进制安装安装 MySQL 5.7 和 MySQL8.0
2.7.1 安装相关包
[18:20:20 root@centos7 ~]#yum install libaio numactl-libs
2.7.2 用户和组
[18:27:30 root@centos7 ~]#useradd -r -s /sbin/nologin -d /data/mysql mysql
[18:46:02 root@centos7 local]#mkdir -p /data/mysql
[18:46:10 root@centos7 local]#chown mysql: /data/mysql
2.7.3 准备程序文件
[18:29:25 root@centos7 ~]#wget https://repo.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
[18:35:03 root@centos7 ~]#tar xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[18:36:36 root@centos7 ~]#cd /usr/local/
[18:36:59 root@centos7 local]#ln -s mysql-5.7.31-linux-glibc2.12-x86_64 mysql
[18:37:37 root@centos7 local]#chown -R root: /usr/local/mysql
2.7.4 准备环境变量
[18:38:55 root@centos7 local]#echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
[18:39:08 root@centos7 local]#. /etc/profile.d/mysql.sh
2.7.5 准备配置文件
[18:43:53 root@centos7 local]#grep -Ev '^#|$^' /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/date/mysql/mysql.sock
log-error=/var/log/mysql.log
[client]
socket=/data/mysql/mysql.sock
!includedir /etc/my.cnf.d
[18:51:01 root@centos7 local]#touch /var/log/mysql.log
[18:51:16 root@centos7 local]#chown mysql: /var/log/mysql.log
2.7.6 生成数据库文件,并提取 root 密码
[18:46:25 root@centos7 local]#mysqld --initialize --user=mysql --datadir=/data/mysql
[18:52:20 root@centos7 local]#grep password /var/log/mysql.log
2021-01-28T10:51:39.397031Z 1 [Note] A temporary password is generated for root@localhost: ggtorsg(H6wj
2.7.7 准备服务脚本和启动
[19:17:02 root@centos7 ~]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[19:17:27 root@centos7 ~]#chkconfig --add mysqld
[19:27:59 root@centos7 ~]#service mysqld start
2.7.8 修改口令
[19:28:59 root@centos7 ~]#mysqladmin -uroot -p'gEG?>*c=E8oL' password 123456
2.7.9 测试登录
[19:53:56 root@centos7 ~]#mysql -uroot -p123456
2.8 实战案例:一键安装 MySQL5.7 和 MySQL8.0 二进制包的脚本
2.8.1 在线安装脚本
2.9 源码编译安装 MySQL 5.6
建议:内存 4G 以上,CPU 核数越多越好
2.9.1 安装相关依赖包
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel perl-Data-Dumper
2.9.2 做准备用户和数据目录
useradd -r -s /sbin/nologin -d /data/mysql mysql
2.9.3 准备数据库目录
mkdir /data/mysql
chown mysql.mysql /data/mysql
2.9.4 源码编译安装
编译安装说明
利用 cmake 编译,而利用传统方法,cmake 的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译
编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
2.9.4.1 下载并解压缩源码包
2.9.4.2 源码编译安装 mariadb
cmake . -DCMAKE_INSTALL_PREFIX=/apps/mysql -DMYSQL_DATADIR=/data/mysql/ -DSYSCONFDIR=/etc/ -DMYSQL_USER=mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DENABLED_LOCAL_INFILE=1 -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
[21:17:56 root@centos7 mysql-5.6.49]#make
[21:20:36 root@centos7 mysql-5.6.49]#make install
提示:如果出错,执行 rm -f CMakeCache.txt
2.9.5 准备环境变量
[21:22:01 root@centos7 mysql-5.6.49]#echo 'PATH=/apps/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
[21:22:08 root@centos7 mysql-5.6.49]#source /etc/profile.d/mysql.sh
2.9.6 生成数据库文件
[21:22:29 root@centos7 mysql]#scripts/mysql_install_db --datadir=/data/mysql --user=mysql
2.9.7 准备配置文件
[21:23:44 root@centos7 mysql]#cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf
2.9.8 准备启动脚本,并启动服务
[21:24:46 root@centos7 mysql]#cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld
[21:25:18 root@centos7 mysql]#chkconfig --add mysqld
[21:25:30 root@centos7 mysql]#service mysqld start
Starting MySQL.Logging to '/data/mysql/centos7.err'.
. SUCCESS!
2.9.9 安全初始化
[21:26:52 root@centos7 mysql]#mysql_secure_installation
2.10 基于 dockcer 容器创建 MySQL
范例:
[14:39:24 root@centos7 ~]#docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
2.11 MySQL 多实例
2.11.1 多实例介绍
-
什么是数据库多实例
- MySQL 多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307 等),同时运行多个 MySQL 服务进程,这些服务进程通过不同的 Socket 监听不同的服务端口来提供服务。多实例可能是 MySQL 的不同版本,也可能是 MySQL 的同一版本实现
-
多实例的好处
- 可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择
-
多实例弊端
- 存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者 SQL 查询慢时,整个实例会消耗大量的 CPU、磁盘 I/O 等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以具体的需求要根据自己的实际情况而定。
2.11.2 实战案例 1: CentOS 8 实现 MySQL 8.0 二进制安装的多实例
本案例适用于以版本
mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
实战目标
CentOS8 二进制安装MySQL8.0,并实现三个实例
环境说明
一台系统CentOS 8.X主机
前提准备
关闭SElinux
关闭防火墙
时间同步
2.11.2.1 实现步骤
下载 MySQL 二进制文件并解压缩
[14:48:49 root@centos8 ~]##wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar
[14:49:55 root@centos8 ~]#tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar -C /usr/local/
[14:50:06 root@centos8 ~]#cd /usr/local/
[14:50:11 root@centos8 local]#ln -sv mysql-8.0.21-linux-glibc2.12-x86_64 mysql
[14:50:46 root@centos8 local]#ll mysql/
total 408
drwxr-xr-x 2 7161 31415 4096 Jun 17 2020 bin
drwxr-xr-x 2 7161 31415 55 Jun 17 2020 docs
drwxr-xr-x 3 7161 31415 282 Jun 17 2020 include
drwxr-xr-x 6 7161 31415 201 Jun 17 2020 lib
-rw-r--r-- 1 7161 31415 404759 Jun 17 2020 LICENSE
drwxr-xr-x 4 7161 31415 30 Jun 17 2020 man
-rw-r--r-- 1 7161 31415 687 Jun 17 2020 README
drwxr-xr-x 28 7161 31415 4096 Jun 17 2020 share
drwxr-xr-x 2 7161 31415 77 Jun 17 2020 support-files
创建用户和组配置权限
[14:50:58 root@centos8 local]#useradd -r -s /sbin/nologin mysql
[14:51:45 root@centos8 local]#chown -R mysql: /usr/local/mysql/
[14:52:17 root@centos8 local]#ll /usr/local/mysql/
total 408
drwxr-xr-x 2 mysql mysql 4096 Jun 17 2020 bin
drwxr-xr-x 2 mysql mysql 55 Jun 17 2020 docs
drwxr-xr-x 3 mysql mysql 282 Jun 17 2020 include
drwxr-xr-x 6 mysql mysql 201 Jun 17 2020 lib
-rw-r--r-- 1 mysql mysql 404759 Jun 17 2020 LICENSE
drwxr-xr-x 4 mysql mysql 30 Jun 17 2020 man
-rw-r--r-- 1 mysql mysql 687 Jun 17 2020 README
drwxr-xr-x 28 mysql mysql 4096 Jun 17 2020 share
drwxr-xr-x 2 mysql mysql 77 Jun 17 2020 support-files
配置环境变量
[14:52:29 root@centos8 local]#echo 'export PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
[14:53:33 root@centos8 local]#. /etc/profile.d/mysql.sh
创建各实例数据存放的目录
[14:53:42 root@centos8 local]#mkdir -p /mysql/{3306,3307,3308}
[14:54:46 root@centos8 local]#chown -R mysql: /mysql/
[14:55:13 root@centos8 local]#ll /mysql/
total 0
drwxr-xr-x 2 mysql mysql 6 Jan 30 14:54 3306
drwxr-xr-x 2 mysql mysql 6 Jan 30 14:54 3307
drwxr-xr-x 2 mysql mysql 6 Jan 30 14:54 3308
[14:55:18 root@centos8 local]#tree /mysql/
/mysql/
├── 3306
├── 3307
└── 3308
初始化各实例数据库文件
#针对每个实例初始化
[14:55:22 root@centos8 local]#mysqld --initialize-insecure --user=mysql --datadir=/mysql/3306
[14:56:34 root@centos8 local]#mysqld --initialize-insecure --user=mysql --datadir=/mysql/3307
[14:56:46 root@centos8 local]#mysqld --initialize-insecure --user=mysql --datadir=/mysql/3308
[14:57:38 root@centos8 local]#tree /mysql/ -d
/mysql/
├── 3306
│ ├── #innodb_temp
│ ├── mysql
│ ├── performance_schema
│ └── sys
├── 3307
│ ├── #innodb_temp
│ ├── mysql
│ ├── performance_schema
│ └── sys
└── 3308
├── #innodb_temp
├── mysql
├── performance_schema
└── sys
准备配置文件/etc/my.cnf
[14:57:50 root@centos8 local]#file `which mysqld_multi`
/usr/local/mysql/bin/mysqld_multi: Perl script text executable
[14:59:17 root@centos8 local]#vim /etc/my.cnf
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
[mysqld3306]
datadir=/mysql/3306
port=3306
socket=/mysql/3306/mysql3306.sock
pid-file=/mysql/3306/mysql3306.pid
log-error=/mysql/3306/mysql3306.log
[mysqld3307]
datadir=/mysql/3307
port=3307
socket=/mysql/3307/mysql3307.sock
pid-file=/mysql/3307/mysql3307.pid
log-error=/mysql/3307/mysql3307.log
[mysqld3308]
datadir=/mysql/3308
port=3308
socket=/mysql/3308/mysql3308.sock
pid-file=/mysql/3308/mysql3308.pid
log-error=/mysql/3308/mysql3308.log
启动多实例
#说明:用 mysqld_multi start N 启动多个实例,
#注意数字N和my.cnf中的[mysqldN]对应,示例:1-3就是启动[mysqld1]、[mysqld2]、[mysqld3]配置段的MySQL实例
#启动三个MySQL实例
[root@centos8 ~]#mysqld_multi start 3306
[root@centos8 ~]#mysqld_multi start 3307
[root@centos8 ~]#mysqld_multi start 3308
# 或者用下面命令批量启动多个实例
[15:25:47 root@centos8 ~]#mysqld_multi start 3306-3308
[15:24:45 root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 70 *:33060 *:*
LISTEN 0 128 *:3306 *:*
LISTEN 0 128 *:3307 *:*
LISTEN 0 128 *:3308 *:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 [::]:22 [::]:*
关闭多实例
[15:25:47 root@centos8 ~]#mysqld_multi stop 3306-3308
安全加固
#批量修改多个实例root密码
[15:28:43 root@centos8 ~]#for i in {3306..3308};do mysqladmin -S /mysql/$i/mysql$i.sock password 123456;done
#批量验证密码连接
[15:28:46 root@centos8 ~]#for i in {3306..3308};do mysqladmin -uroot -p123456 -S /mysql/$i/mysql$i.sock ping;done
配置开机启动多实例
[15:29:46 root@centos8 ~]#vim /etc/rc.d/rc.local
. /etc/profile.d/mysql.sh
mysqld_multi start 3306-3308
[15:31:18 root@centos8 ~]#chmod +x /etc/rc.d/rc.local
rc.local文件中首行必须有shebang机制才可以生效
#!/bin/bash
2.12.3 实战案例 2:CentOS 8 实现 mariadb 的 yum 安装的多实例
实战目的
CentOS 8 yum安装mariadb-10.3.17并实现三个实例
环境要求
一台系统CentOS 8.X主机
前提准备
关闭SElinux
关闭防火墙
时间同步
2.12.3.1 实现步骤
安装 mariadb
[10:27:54 root@centos8 ~]#yum install -y mariadb-server
准备三个实例的目录
[10:27:54 root@centos8 ~]#mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
[10:28:29 root@centos8 ~]#chown -R mysql:mysql /mysql
[10:28:35 root@centos8 ~]#tree /mysql/
/mysql/
├── 3306
│ ├── bin
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
├── 3307
│ ├── bin
│ ├── data
│ ├── etc
│ ├── log
│ ├── pid
│ └── socket
└── 3308
├── bin
├── data
├── etc
├── log
├── pid
└── socket
21 directories, 0 files
生成数据库文件
[10:30:21 root@centos8 ~]#mysql_install_db --user=mysql --datadir=/mysql/3306/data
[10:30:21 root@centos8 ~]#mysql_install_db --user=mysql --datadir=/mysql/3307/data
[10:30:21 root@centos8 ~]#mysql_install_db --user=mysql --datadir=/mysql/3308/data
准备配置文件
[10:30:28 root@centos8 ~]#vim /mysql/3306/etc/my.cnf
[mysqld]
port=3306
datadir=/mysql/3306/data
socket=/mysql/3306/socket/mysql.sock
log-error=/mysql/3306/log/mysql.log
pid-file=/mysql/3306/pid/mysql.pid
#重复上面步骤设置3307,3308
[10:34:49 root@centos8 ~]#sed 's/3306/3307/' /mysql/3306/etc/my.cnf >/mysql/3307/etc/my.cnf
[10:35:01 root@centos8 ~]#sed 's/3306/3308/' /mysql/3306/etc/my.cnf >/mysql/3308/etc/my.cnf
准备启动脚本
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于