更新时间:2023 年 5 月
简介
MySQL数据库版本众多(目前以 MySQL 5.7
和 MySQL 8
为主),相关工具也不少,安装方式多种多样,具体可以查阅官方下载地址:MySQL :: MySQL Community Downloads
本文将使用 RockyLinux8 分别以 二进制 TAR 包方式 和 DNF(YUM) 方式 示例安装
MySQL 8.0
安装配置与 MySQL 5.7
基本一致,部分设置略有不同
二进制 TAR 包安装
参考:MySQL :: MySQL 8.0 Reference Manual :: 2.2 Installing MySQL on Unix/Linux Using Generic Binaries
环境
主机:AlmaLinux release 9.2 (Turquoise Kodkod)
查看 glibc 版本
$ ldd --version
ldd (GNU libc) 2.34
Copyright (C) 2021 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.
Written by Roland McGrath and Ulrich Drepper.
准备安装包
mysql 社区版 TAR 包官网下载地址:https://downloads.mysql.com/archives/community/
系统准备
关闭防火墙和selinux
$ systemctl disable --now firewalld
$ setenforce 0
$ sed -i 's/=enforcing/=disabled/g' /etc/sysconfig/selinux
卸载系统自带的mariadb
# 查看系统自带的 Mariadb
$ rpm -qa | grep mariadb | xargs -i rpm -e --nodeps {}
创建安装目录
自定义路径,注意与配置文件相匹配
# mysql 程序目录
$ mkdir -p /mysql/app
# mysql 数据目录
$ mkdir -p /mysql/data/3306
# mysql 日志目录
$ mkdir -p /mysql/log/3306
# mysql 配置目录
$ mkdir -p /mysql/etc/3306
创建用户和组
$ groupadd -r mysql
$ useradd -r -g mysql -s /bin/false mysql
安装 libtinfo.so.6
mysql 依赖 libtinfo.so.6
需要手动安装,且存在于 EPEL 源中
$ dnf install epel-release -y
安装 ncurses-compat-libs
软件包,其中包含 libtinfo.so.6:
$ dnf install ncurses-compat-libs -y
安装 MySQL
准备安装文件并解压
# 上传过程省略
$ ll mysql*
-rw-r--r--. 1 root root 610315332 May 22 20:05 mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
# 解压
$ tar -xf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
# 重命名二进制包
$ mv mysql-8.0.32-linux-glibc2.12-x86_64/ /mysql/app/mysql
初始化
$ chown -R mysql:mysql /mysql
# 相比 MySQL 5.7 新增 lower-case-table-names=1,因为默认以 lower-case-table-names=0 初始化,与 my.cnf 配置不一致,会导致数据库无法启动
# --initialize 初始化会生成随机密码(打印在标准输出),如果需要空密码则使用 --initialize-insecure
$ /mysql/app/mysql/bin/mysqld --lower-case-table-names=1 --initialize-insecure --user=mysql --basedir=/mysql/app/mysql/ --datadir=/mysql/data/3306/
2023-05-22T12:14:23.628834Z 0 [System] [MY-013169] [Server] /mysql/app/mysql/bin/mysqld (mysqld 8.0.32) initializing of server in progress as process 1661
2023-05-22T12:14:23.658500Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-05-22T12:14:24.403362Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-05-22T12:14:25.436077Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
后期设置
创建配置文件 my.cnf
$ vi /mysql/etc/3306/my.cnf
[mysql]
# set mysql client default chararter
default-character-set=utf8
[mysqld]
# set mysql server port
port=3306
socket=/mysql/data/3306/mysql.sock
# set mysql install base dir
basedir=/mysql/app/mysql
# set the data store dir
datadir=/mysql/data/3306/
# set the number of allow max connnection
max_connections=200
# set server charactre default encoding
character-set-server=utf8mb4
# the storage engine
default-storage-engine=INNODB
innodb_buffer_pool_size=200M
lower_case_table_names=1
max_allowed_packet=16M
explicit_defaults_for_timestamp=true
log-output=FILE
general_log=0
general_log_file=/myysql/log/3306/db-general.err
slow_query_log=ON
slow_query_log_file=/mysql/log/3306/db-query.err
long_query_time=10
log-error=/mysql/log/3306/db-error.err
加入 systemd 管理
$ vi /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
[Service]
User=mysql
Group=mysql
# 指定 Type=forking 则要配置 PID 或者指定守护进程(daemonize)运行
Type=forking
TimeoutSec=0
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
PermissionsStartOnly=true
ExecStart=/mysql/app/mysql/bin/mysqld --defaults-file=/mysql/etc/3306/my.cnf --daemonize
LimitNOFILE = 65536
LimitNPROC = 65536
# 重新加载 systemd 文件
$ systemctl daemon-reload
# 启动 mysql 并设置开机启动
$ systemctl enable --now mysqld
创建软连接
# 创建配置文件软连接,放到默认的 /etc/ 下,方便后期查找
$ ln -sf /mysql/data/3306/my.cnf /etc/my.cnf
# 创建 sock 软链接
$ ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock
配置环境变量(全局)
# 创建变量文件
$ cat > /etc/profile.d/mysql.sh << EOF
# set mysql environment
MYSQL_HOME="/mysql/app/mysql/"
export PATH=\${PATH}:\${MYSQL_HOME}/bin/
EOF
# 重新加载 /etc/profile
$ source /etc/profile
修改密码并授权
# 登录 mysql,由于初始化时使用无密码,所以此处无需密码
$ mysql -uroot -p
Enter password:
# 设置root用户新密码为 520123
mysql> SET PASSWORD='520123';
Query OK, 0 rows affected (0.01 sec)
# 授予root与用户所有数据库(表)、所有主机登录的权限
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '520123';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.16 sec)
# 也可以使用 mysqladmin 修改密码
$ mysqladmin -uroot password '520123'
DNF 安装
该方式常用于互联网环境下安装
环境
主机:AlmaLinux release 9.2 (Turquoise Kodkod)
准备 yum 源
YUM 源地址经常会修改,请及时到官网获取最新连接
MySQL 官方 YUM 源地址:MySQL :: Download MySQL Yum Repository
可以从官方下载对应操作系统的 YUM 源地址的 RPM 包,或者获取 RPM 包链接地址后直接在系统上下载
系统准备
关闭防火墙和 selinux
$ systemctl disable --now firewalld
$ setenforce 0
$ sed -i 's/=enforcing/=disabled/g' /etc/sysconfig/selinux
卸载系统自带的 mariadb(如果有安装)
# 列出系统自带的 Mariadb 并删除
$ rpm -qa | grep mariadb | xargs -i rpm -e --nodeps {}
安装
下载并配置 YUM 源
# 配置 yum 源
$ curl -O https://repo.mysql.com//mysql80-community-release-el9-1.noarch.rpm
$ rpm -Uvh mysql80-community-release-el9-1.noarch.rpm
安装 MySQL 8.0
# 查看 mysql 软件包信息
$ dnf info mysql-server
Last metadata expiration check: 0:00:47 ago on Mon 22 May 2023 07:16:57 PM CST.
Available Packages
Name : mysql-server
Version : 8.0.32
Release : 1.el9_2
Architecture : x86_64
Size : 17 M
Source : mysql-8.0.32-1.el9_2.src.rpm
Repository : appstream
Summary : The MySQL server and related files
URL : http://www.mysql.com
License : GPLv2 with exceptions and LGPLv2 and BSD
Description : MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
: client/server implementation consisting of a server daemon (mysqld)
: and many different client programs and libraries. This package contains
: the MySQL server and some accompanying files and directories.
# 安装 mysql 8
$ dnf install mysql-server -y
# 启动 mysql,并设置开机启动
$ systemctl enable --now mysqld
# 查看初始密码
$ grep 'password' /var/log/mysqld.log | awk -F':| ' '{print $NF}'
Vrq7kadrHE?L
后期设置
修改密码并授权
# 登录 mysql
$ mysql -uroot -p
Enter password: # 此处输入初始化密码
# 设置 root 用户新密码为 Qwert123..
mysql> SET PASSWORD='Qwert123..';
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 创建 'root'@'%' ;
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Qwert123..';
Query OK, 0 rows affected (0.00 sec)
# 授予 'root'@'%' 所有数据库(表)、所有主机登录的权限,且具有 授予其他用户权限 的权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)