1. 版本选择
选择大方向:GA版,退后6-12月,前后没有太多小版本,作为选择。
5.6 : 5.6.40 + 双数版,经典版,官方即将停止更新;
5.7 : 5.7.22/30 + 双数版,主流,逐步过渡到8.0;
8.0 : 8.0.30 + 双数版,开始评测,小规模边缘业务数据库使用;
2. 数据库服务程序下载
利用官方网址获取数据库软件程序:https://www.mysql.com/
下载连接:
选择官网网站的 DOWNLOADS
进行数据库软件程序下载选择;
在数据库官方下载页面中,选择 MySQL Community (GPL) Downloads
链接,进行数据库程序社区版下载;
进入数据库程序的社区版下载页面后,会看到社区版数据库服务的多种安装场景,选择MySQL Community Server
方式安装;
官方历史版下载页面:
进入到社区版服务器安装场景界面,需要选择数据库服务的安装部署环境和需要下载的程序具体版本信息;
查看Linux系统的glibc运行使用的C语言库版本信息:
[root@localhost ~]# getconf GNU_LIBC_VERSION
glibc 2.17
[root@localhost ~]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
3. 数据库服务安装
在Linux系统中常见的部署安装方式:
序号 | 安装方式 | 特征说明 |
---|---|---|
01 | 采用二进制方式安装 | 直接解压缩二进制程序包,进行简单的配置和初始化操作即可。比较简单,但是没办法定制,软件大,往往被中小企业选择。 |
02 | 采用rpm包方式安装 | 需要从官方网站下载rpm程序包,需要考虑系统环境的兼容性,需要解决软件程序包依赖。比较复杂、需要下载、手工解决依赖、没法定制。 |
03 | 采用yum包方式安装 | 需要根据官方网站说明,配置yum下载的仓库源信息,在联网情况下进行安装部署。方法简单、自动解决依赖(默认源没有数据库), 没法定制。 |
04 | 采用源码包方式安装 | 需要从官方网站下载源码程序包,并且需要解决程序包依赖问题,以及需要采用编译安装,特别复杂、编译软件gcc都需要升级,可定制任何东西.。 |
说明:本次选择二进制包安装方式,使安装过程更加简单和规范。
3.1 软件环境准备
# 1)查看系统环境
[root@localhost ~]# cat /etc/redhat-release #<==操作系统版本。
CentOS Linux release 7.9.2009 (Core)
# 2)关闭selinux:
setenforce 0 #临时关闭selinux
getenforce #查看关闭selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 3)卸载mariadb依赖包
yum remove mariadb-libs -y #<==卸载系统已经安装的mariadb依赖包。
# 4)安装相关依赖包
yum install ncurses ncurses-devel libaio-devel openssl openssl-devel -y
# 5)临时及永久关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3.2 建立用户账号
[root@localhost ~]# useradd mysql -s /sbin/nologin -M #<==创建mysql用户。
[root@localhost ~]# id mysql
- 下载、解压mysql软件包,并做好软链接mysql到/usr/local
[root@localhost ~]# cd /opt
[root@localhost opt]# wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz
# 这里建议直接选择已经下载好的安装包进行上传安装,稳定
[root@localhost opt]# tar xf mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz
[root@localhost opt]# mv /opt/mysql-8.0.36-linux-glibc2.12-x86_64 /usr/local/mysql
[root@localhost opt]# ls -l /usr/local/mysql
3.3 创建相关目录文件授权
创建MySQL数据目录、配置文件(/etc/my.cnf
)并授权。
# 1)增加简易配置文件,后面在优化
[root@localhost opt]# cat>/etc/my.cnf<<'EOF'
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
port=3306
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
EOF
# 2)验证配置文件内容
[root@localhost opt]# cat /etc/my.cnf
# 3)配置文件授权
[root@localhost opt]# chown mysql.mysql /etc/my.cnf
# 4)创建MySQL数据目录并授权
[root@localhost opt]# mkdir -p /data/3306/data
[root@localhost opt]# chown -R mysql.mysql /data
[root@localhost opt]# ls -ld /data
3.4 配置PATH环境变量
# 1) 配置PATH环境变量
[root@localhost opt]# echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
# 2)加载生效并检查
[root@localhost opt]# . /etc/profile
[root@localhost opt]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
3.5 初始化数据库
数据库初始化命令应用解读:
核心程序命令 | 初始化核心参数 | 数据管理用户 | 数据存储路径 | 数据存放目录 |
---|---|---|---|---|
mysqld | –initialize-insecure | –user=mysql | –basedir=/usr/local/mysql | –datadir=/data/3306/data |
# 1)初始化MySQL数据库
[root@localhost opt]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
初始化数据库的实质就是创建基础的数据库系统的库文件等信息,例如:生成mysql库表等。
[root@localhost opt]# ls /data/3306/data/ -l total 79292 -rw-r----- 1 mysql mysql 56 Jun 27 17:42 auto.cnf -rw------- 1 mysql mysql 1705 Jun 27 17:42 ca-key.pem -rw-r--r-- 1 mysql mysql 1112 Jun 27 17:42 ca.pem -rw-r--r-- 1 mysql mysql 1112 Jun 27 17:42 client-cert.pem -rw------- 1 mysql mysql 1705 Jun 27 17:42 client-key.pem -rw-r----- 1 mysql mysql 196608 Jun 27 17:42 #ib_16384_0.dblwr -rw-r----- 1 mysql mysql 8585216 Jun 27 17:42 #ib_16384_1.dblwr -rw-r----- 1 mysql mysql 6209 Jun 27 17:42 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 Jun 27 17:42 ibdata1 drwxr-x--- 2 mysql mysql 4096 Jun 27 17:42 #innodb_redo drwxr-x--- 2 mysql mysql 6 Jun 27 17:42 #innodb_temp drwxr-x--- 2 mysql mysql 143 Jun 27 17:42 mysql -rw-r----- 1 mysql mysql 26214400 Jun 27 17:42 mysql.ibd drwxr-x--- 2 mysql mysql 8192 Jun 27 17:42 performance_schema -rw------- 1 mysql mysql 1705 Jun 27 17:42 private_key.pem -rw-r--r-- 1 mysql mysql 452 Jun 27 17:42 public_key.pem -rw-r--r-- 1 mysql mysql 1112 Jun 27 17:42 server-cert.pem -rw------- 1 mysql mysql 1709 Jun 27 17:42 server-key.pem drwxr-x--- 2 mysql mysql 28 Jun 27 17:42 sys -rw-r----- 1 mysql mysql 16777216 Jun 27 17:42 undo_001 -rw-r----- 1 mysql mysql 16777216 Jun 27 17:42 undo_002
- 初始化的相关知识
知识1 : 之前不同版本的初始化命令异同
#5.7之前初始化 /usr/local/mysql/scripts/mysql_install_db #5.7和8.0初始化 /usr/local/mysql/bin/mysqld
知识2:
--initialize
和--initialize-insecure
区别
--initialize
: 会生成一个12位,4种密码复杂度临时管理员密码,第一次登陆需要修改。--initialize-insecure
:管理员密码为空。
注意:
mysql_install_db
程序已从MySQL发行版中删除。数据目录初始化应通过使用--initialize
或--initialize-insecure
选项调用mysqld来执行。 此外,删除了mysql_install_db
使用的mysqld选项,并删除了控制mysql_install_db
安装位置的选项。
3.6 配置并启动
# 服务启动脚本:/usr/local/mysql/support-files/mysql.server
# 1.设置MySQL启动脚本
[root@localhost opt]# cd /usr/local/mysql/support-files/
[root@localhost support-files]# cp mysql.server /etc/init.d/mysqld #<==拷贝mysql启动脚本到启动路径。
[root@localhost support-files]# systemctl enable mysqld #<==等价chkconfig mysqld on(c7把服务设置开机自启动命令)
# 2.启动MySQL数据库
[root@localhost support-files]# systemctl start mysqld
# 3.检查MySQL数据库是否启动。
[root@localhost support-files]# netstat -lntup|grep 330
# 4.查看MySQL数据库启动结果日志。
[root@localhost support-files]# cat /data/3306/data/db.err # 文件名格式:主机名.err
对于一些较新的发行版,可能已经移除了init的管理方法,这个提供一个直接使用systemd管理的方法。亲测可用。Systemd服务管理方式管理MySQL
3.7 验证登录数据库
[root@localhost support-files]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
4. 安装常见故障分析及解决
问题1:初始化报错libaio
[root@localhost opt]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
mysqld: error while loading shared libraries: libaio.so.1: cannot open
shared object file: No such file or directory
# 原因:缺少libaio-devel依赖包
# 解决:yum install libaio-devel -y
# 如果不知道包名,可以执行 yum provides libaio -y 查找
问题2: 初始化报错数据文件目录不为空
2021-11-09T04:08:57.631792Z 0 [ERROR] [MY-010457] [Server] --initialize
specified but the data directory has files in it. Aborting.
2021-10-09T04:08:57.631803Z 0 [ERROR] [MY-013236] [Server] The designated
data directory /data/3306/data/ is unusable. You can remove all files that
the server added to it.
# 解决:rm -rf /data/3306/data/* 手动清空
问题3:启动后初始无法登录
[root@localhost ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using
password: NO)
# 原因:此问题一般都是数据库初始化问题或者数据库文件损坏以及目录权限问题。
# 解决办法:删除初始化目录,然后重新初始化数据库,剩余过程不变。
rm -rf /data/3306/data/*
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
5. 配置文件相关
5.1 配置文件基本结构
- 书写格式规范说明:
# 配置文件模板信息参考
cat /etc/my.cnf # 获取全部配置参数 mysql --verbose --help
[mysqld] # 服务端标签,需要重启,影响服务运行。获取全部配置参数 mysqld --verbose --help
port=3306
server_id=6
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql] # mysql客户端标签,配置后不需要重启
socket=/tmp/mysql.sock
[mysqld_safe] #<==启动服务标签,配置后不需要重启
……
[mysqldump] #<==备份标签,配置后不需要重启
……
-- 服务端常见标签类型:[mysqld] [mysql_safe] [server]
-- 客户端常用标签类型:[mysql] [mysqldump] [client]
- 配置文件信息结构说明:
序号 | 配置部分 | 配置信息说明 |
---|---|---|
01 | 带有[]部分 | 表示配置标签部分,用于区分不同程序运行的参数,包含服务器端和客户端标签信息 |
[服务端标签] | 负责数据库服务端运行参数信息设定 | |
[客户端标签] | 影响客户端与服务连接参数信息设定(只影响本地客户端连接,不影响远程客户端连接) | |
02 | 不带[]部分 | 表示配置参数部分 |
- 配置文件信息内容说明:
序号 | 配置信息 | 解释说明 |
---|---|---|
[mysqld] | 服务端配置标签 | |
01 | user=mysql | 表示数据库服务管理用户信息 |
02 | basedir=/usr/local/mysql | 表示数据库服务程序安装路径 |
03 | datadir=/data/3306/data | 表示数据库服务数据存储路径 |
04 | server_id=6 | 表述数据库服务标识节点编号(主从复制的唯一编号) |
05 | port=3306 | 表示数据库服务启动端口设定 |
06 | socket=/tmp/mysql.sock | 表示数据库服务本地连接文件(套接字文件) |
07 | default_authentication_plugin=mysql_native_password | 表示数据库服务加密插件设定,用于向下兼容 |
[mysql] | 客户端配置标签(本地连接数据库生效) | |
01 | socket=/tmp/mysql.sock | 表示数据库服务本地连接文件(套接字文件) |
5.2 修改数据库配置文件
默认首个配置位置:
/etc/my.cnf
- 配置文件加载应用读取顺序:
# 通过数据库服务启动命令获取加载文件顺序
[root@db ~]# mysqld --help --verbose|grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
# 得到数据库服务加载配置文件顺序:
/etc/my.cnf ==> /etc/mysql/my.cnf ==> /usr/local/mysql/etc/my.cnf ==> ~/.my.cnf
# 数据库服务加载特定路径中的配置文件信息
# 配置文件特定路径举例:
/opt/my.cnf
/data/3306/my.cnf
/data/3307/my.cnf
/data/3308/my.cnf
# 利用启动脚本加载参数信息,手工指定加载配置文件的路径位置信息
mysqld --defaults-file=/opt/my.cnf &
mysqld_safe --defaults-file=/opt/my.cnf &
- 参数配置方式:
- 源码包编译安装时进行配置;
- 系统命令行指定部分mysql参数;
- mysql命令行临时设置MySQL参数,查看所有参数
show variables;
。
- 参数查看:(两个级别,全局:
global
,局部:session
)
- global级:全局
mysql> select @@global.wait_timeout; +-----------------------+ | @@global.wait_timeout | +-----------------------+ | 28800 | +-----------------------+ 1 row in set (0.00 sec) mysql> show global variables like '%wait_timeout%'; +--------------------------+----------+ | Variable_name | Value | +--------------------------+----------+ | innodb_lock_wait_timeout | 50 | | lock_wait_timeout | 31536000 | | mysqlx_wait_timeout | 28800 | | wait_timeout | 28800 | +--------------------------+----------+ 4 rows in set (0.04 sec) mysql> select * from performance_schema.global_variables where variable_name ='wait_timeout'; +---------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------+----------------+ | wait_timeout | 28800 | +---------------+----------------+ 1 row in set (0.01 sec)
- session级:局部
mysql> select @@wait_timeout; +----------------+ | @@wait_timeout | +----------------+ | 28800 | +----------------+ 1 row in set (0.00 sec) mysql> select @@session.wait_timeout; +------------------------+ | @@session.wait_timeout | +------------------------+ | 28800 | +------------------------+ 1 row in set (0.00 sec) mysql> show variables like 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 28800 | +---------------+-------+ 1 row in set (0.00 sec) mysql> show session variables like 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 28800 | +---------------+-------+ 1 row in set (0.00 sec) mysql> select * from performance_schema.session_variables where variable_name ='wait_timeout'; +---------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------+----------------+ | wait_timeout | 28800 | +---------------+----------------+ 1 row in set (0.00 sec)
- 参数修改
- session级参数的修改(退出会话即失效)
mysql> set wait_timeout=10; mysql> set session wait_timeout=11;
- global级参数的修改(重启数据库失效)
mysql> set global wait_timeout=20; # 不能重启MySQL,还要需要参数,用这个命令。
- 配置文件修改:重启生效,永久生效
# vi /etc/my.cnf [mysqld] wait_timeout = 10
工作中坚决不允许重启MySQL,改参数用下面方法:1. 先set global全局修改。 2.同时改配置文件/etc/my.cnf。