数据库安装管理

1. YUM安装数据库

MySQL Yum仓库提供了用于在Linux平台上安装MySQL服务器、客户端和其他组件的RPM包。

MySQL Yum安装下载地址: https://dev.mysql.com/downloads/repo/yum/

使用MySQL Yum仓库时,默认选择安装最新的MySQL版本。如果需要使用低版本请按如下操作。

1.1 安装MySQL仓库源

1
2
3
4
5
# 下载并安装MySQL Yum仓库源
[root@sql ~]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

# 验证仓库安装
[root@sql ~]# yum repolist enabled | grep mysql

1.2 选择并启用适合当前平台的发行包

查看所有MySQL发行版仓库

1
2
# 列出所有MySQL发行版仓库
[root@sql ~]# yum repolist all | grep mysql

输出示例:

1
2
3
4
5
mysql-connectors-community/x86_64  MySQL Connectors Community     enabled:     51
mysql-tools-community/x86_64 MySQL Tools Community enabled: 63
mysql80-community/x86_64 MySQL 8.0 Community Server enabled: 161
mysql57-community/x86_64 MySQL 5.7 Community Server disabled
mysql56-community/x86_64 MySQL 5.6 Community Server disabled

禁用8.0发行版仓库,启用5.7发行版仓库

1
2
3
4
5
6
7
8
9
10
11
# 安装yum工具
[root@sql ~]# yum install yum-utils -y

# 禁用MySQL 8.0仓库
[root@sql ~]# yum-config-manager --disable mysql80-community

# 启用MySQL 5.7仓库
[root@sql ~]# yum-config-manager --enable mysql57-community

# 验证仓库状态
[root@sql ~]# yum repolist enabled | grep mysql

手动编辑仓库配置文件

可以手动编辑/etc/yum.repos.d/mysql-community.repo文件配置仓库:

1
2
# 编辑仓库配置文件
[root@sql ~]# vim /etc/yum.repos.d/mysql-community.repo

配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

配置说明:

  • enabled=1: 启用该仓库
  • enabled=0: 禁用该仓库
  • gpgcheck=1: 启用GPG检查

1.3 安装MySQL并启动

1
2
3
4
5
6
7
8
9
10
11
# 安装MySQL服务器
[root@sql ~]# yum install -y mysql-community-server

# 启动MySQL服务
[root@sql ~]# systemctl start mysqld

# 设置开机自启动
[root@sql ~]# systemctl enable mysqld

# 检查服务状态
[root@sql ~]# systemctl status mysqld

1.4 MySQL服务器初始化

MySQL服务器初始化(仅适用于MySQL 5.7): 在服务器初始启动时,如果服务器的数据目录为空,则会发生以下情况:

  • 服务器已初始化
  • 在数据目录中生成SSL证书和密钥文件
  • validate_password插件安装并启用
  • 超级用户帐户'root'@'localhost'已创建

超级用户的密码被设置并存储在错误日志文件中。要显示它,请使用以下命令:

1
2
3
# 查看临时密码
[root@vm-70-160 ~]# grep "password" /var/log/mysqld.log
2018-04-28T07:11:51.589629Z 1 [Note] A temporary password is generated for root@localhost: jHlRHucap3+7

或者使用更精确的命令:

1
2
3
4
5
6
7
# 提取临时密码
[root@vm-70-160 ~]# grep "temporary password" /var/log/mysqld.log
2018-04-28T07:11:51.589629Z 1 [Note] A temporary password is generated for root@localhost: jHlRHucap3+7

# 或者使用awk提取
[root@vm-70-160 ~]# awk '/temporary password/ {print $NF}' /var/log/mysqld.log
jHlRHucap3+7

1.5 修改root密码

通过使用生成的临时密码登录并尽快更改root密码,为超级用户帐户设置自定义密码。

1
2
3
4
5
6
7
8
9
# 使用临时密码登录
[root@vm-70-160 ~]# mysql -uroot -pjHlRHucap3+7

# 修改root密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bgx123.com';
Query OK, 0 rows affected (0.01 sec)

# 退出
mysql> exit

注意: MySQL的validate_password插件默认安装。将要求密码至少包含:

  • 大写字母
  • 小写字母
  • 数字
  • 特殊字符
  • 总密码长度至少为8个字符

1.6 验证安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 使用新密码登录
[root@vm-70-160 ~]# mysql -uroot -pBgx123.com

# 查看数据库
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

# 查看MySQL版本
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.22 |
+-----------+
1 row in set (0.00 sec)

2. 通用安装数据库(二进制安装)

采用二进制免编译方式安装MySQL,不需要复杂的编译设置和编译时间等待,解压下载的软件包,初始化即可完成MySQL的安装和启动。

MySQL二进制包下载地址: https://dev.mysql.com/downloads/mysql/

MySQL二进制包官方安装手册: https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

2.1 基础环境准备

1
2
3
4
5
6
7
8
9
10
11
12
13
# 关闭防火墙
[root@sql ~]# systemctl stop firewalld
[root@sql ~]# systemctl disable firewalld

# 关闭SELinux
[root@sql ~]# setenforce 0

# 建立用户与相应目录
[root@sql ~]# groupadd mysql
[root@sql ~]# useradd -r -g mysql -s /sbin/nologin mysql

# 创建源码目录
[root@sql ~]# mkdir /soft/src -p && cd /soft/src

用户说明:

  • -r: 创建系统用户
  • -g mysql: 指定用户组
  • -s /sbin/nologin: 禁止登录shell

2.2 下载MySQL并安装

1
2
3
4
5
6
7
8
9
10
11
# 下载MySQL二进制包
[root@sql src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

# 解压到/soft目录
[root@sql src]# tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /soft

# 创建软链接(方便后续管理)
[root@sql src]# ln -s /soft/mysql-5.7.22-linux-glibc2.12-x86_64/ /soft/mysql

# 验证安装
[root@sql ~]# ls -l /soft/mysql

2.3 进行MySQL初始化

创建初始化目录以及数据库数据目录

1
2
3
4
5
# 创建数据目录和日志目录
[root@sql ~]# mkdir -p /soft/mysql/{mysql-file,data,logs}

# 设置目录权限
[root@sql ~]# chown -R mysql.mysql /soft/mysql/

初始化数据库

1
2
3
4
5
# 初始化数据库
[root@sql ~]# /soft/mysql/bin/mysqld --initialize \
--user=mysql \
--basedir=/soft/mysql \
--datadir=/soft/mysql/data

初始化输出示例:

1
2
3
4
2018-04-28T02:30:33.954980Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-04-28T02:30:33.954980Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2018-04-28T02:30:33.954980Z 0 [Note] mysqld (mysqld 5.7.22) starting as process 12345 ...
2018-04-28T02:30:33.954980Z 1 [Note] A temporary password is generated for 'root'@'localhost': I,isfqnx.0tO

重要: 初始化数据库会告诉默认登录账户与密码,请务必记录临时密码。

使用SSL连接(可选)

1
2
3
4
5
6
# 初始化后重新授权目录权限(如不需要可忽略)
[root@sql ~]# /soft/mysql/bin/mysql_ssl_rsa_setup \
--datadir=/soft/mysql/data/

# 重新设置目录权限
[root@sql ~]# chown -R mysql.mysql /soft/mysql/

2.4 建立MySQL配置文件

1
2
3
4
5
# 备份原有配置文件
[root@sql ~]# cp /etc/my.cnf /etc/my.cnf_bak

# 编辑MySQL配置文件
[root@sql ~]# vim /etc/my.cnf

基本配置示例:

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
[mysqld]
# MySQL安装目录
basedir=/soft/mysql

# MySQL数据目录
datadir=/soft/mysql/data

# 端口
port=3306

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 错误日志
log-error=/soft/mysql/logs/error.log

# PID文件
pid-file=/soft/mysql/data/mysql.pid

# Socket文件
socket=/tmp/mysql.sock

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock

2.5 启动MySQL数据库

方式1: 使用mysqld_safe(不推荐生产环境)

1
2
3
4
5
# 使用mysqld_safe启动
[root@sql ~]# /soft/mysql/bin/mysqld_safe --user=mysql &

# 检查进程
[root@sql ~]# ps aux | grep mysql

方式2: 使用systemd方式管理(强烈推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 拷贝启动脚本
[root@sql ~]# cp /soft/mysql/support-files/mysql.server /etc/init.d/mysqld

# 添加为系统服务
[root@sql ~]# chkconfig --add mysqld

# 设置开机自启动
[root@sql ~]# chkconfig mysqld on

# 修改安装目录与数据存放目录
[root@sql ~]# sed -i '/^basedir=/cbasedir=\/soft\/mysql' /etc/init.d/mysqld
[root@sql ~]# sed -i '/^datadir=/cdatadir=\/soft\/mysql\/data' /etc/init.d/mysqld

# 验证配置
[root@sql ~]# grep -E "^basedir=|^datadir=" /etc/init.d/mysqld

或者手动编辑启动脚本:

1
2
3
4
5
6
# 编辑启动脚本
vim /etc/init.d/mysqld

# 修改以下行
basedir=/soft/mysql
datadir=/soft/mysql/data

启动数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 启动数据库
[root@sql ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

# 检查进程
[root@sql ~]# ps aux | grep mysql
mysql 2659 0.5 25.3 1234567 123456 ? Ssl 10:30 0:01 /soft/mysql/bin/mysqld

# 检查端口
[root@sql ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 2659 mysql 16u IPv6 28431 0t0 TCP *:mysql (LISTEN)

# 或使用ss命令
[root@sql ~]# ss -lntup | grep 3306
tcp LISTEN 0 80 :::3306 :::* users:(("mysqld",pid=2659,fd=16))

2.6 连接数据库测试

配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
# 默认情况没有mysql命令,如果有可能使用过yum安装,这样容易连错数据库(PATH路径存在命令执行优先级问题)
[root@sql ~]# mysql
-bash: mysql: command not found

# 可以选择添加路径至PATH中,或者直接使用绝对路径执行
[root@sql ~]# echo "export PATH=$PATH:/soft/mysql/bin" >> /etc/profile

# 使配置生效
[root@sql ~]# source /etc/profile

# 验证命令
[root@sql ~]# which mysql
/soft/mysql/bin/mysql

登录数据库

1
2
# 使用临时密码登录数据库
[root@sql ~]# mysql -uroot -p"I,isfqnx.0tO"

修改默认密码

1
2
3
4
5
6
7
8
9
10
# 默认系统配置数据库密码必须修改,否则无法使用数据库
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

# 修改系统默认密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'bgx';
Query OK, 0 rows affected (0.01 sec)

# 退出
mysql> exit;

使用新密码重新登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 退出后使用新密码重新登录数据库
[root@sql ~]# mysql -uroot -p"bgx"

# 查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.02 sec)

mysql> exit;

2.7 重新初始化(可选)

注意: 如果需要重新初始化会导致数据全部丢失,请谨慎操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装psmisc工具(用于killall命令)
[root@sql ~]# yum install -y psmisc

# 停止MySQL服务
[root@sql ~]# killall mysqld

# 删除数据目录(危险操作)
[root@sql ~]# rm -rf /soft/mysql/data/*

# 重新初始化
[root@sql ~]# /soft/mysql/bin/mysqld --initialize \
--user=mysql \
--basedir=/soft/mysql \
--datadir=/soft/mysql/data

# 重新生成SSL证书(可选)
[root@sql ~]# /soft/mysql/bin/mysql_ssl_rsa_setup --datadir=/soft/mysql/data

# 重新设置权限
[root@sql ~]# chown -R mysql.mysql /soft/mysql/

3. 源码安装数据库

源码编译安装MySQL可以获得最大的灵活性和性能优化,但需要较长的编译时间。

3.1 安装编译依赖

源码安装mysql需要依赖cmake、boost等工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装编译依赖
[root@sql ~]# yum install -y \
libaio-devel \
gcc \
gcc-c++ \
ncurses \
ncurses-devel \
cmake \
openssl-devel \
bison \
bison-devel

# 创建MySQL用户
[root@sql ~]# useradd -M -s /sbin/nologin mysql

# 创建源码目录
[root@sql ~]# mkdir -p /soft/src/

依赖说明:

  • libaio-devel: 异步IO库
  • gcc/gcc-c++: C/C++编译器
  • ncurses/ncurses-devel: 终端控制库
  • cmake: 构建工具
  • openssl-devel: SSL开发库
  • bison: 语法分析器

3.2 下载源码包并编译MySQL

1
2
3
4
5
6
7
8
9
# 下载MySQL源码包(包含boost)
[root@sql ~]# cd /soft/src/
[root@sql src]# wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.22.tar.gz

# 解压源码包
[root@sql src]# tar xf mysql-boost-5.7.22.tar.gz

# 进入源码目录
[root@sql src]# cd mysql-5.7.22/

配置编译选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 配置编译选项
[root@sql mysql-5.7.22]# cmake . \
-DCMAKE_INSTALL_PREFIX=/soft/mysql-5.7.22 \
-DMYSQL_UNIX_ADDR=/soft/mysql-5.7.22/data/mysql.sock \
-DMYSQL_DATADIR=/soft/mysql-5.7.22/data \
-DSYSCONFDIR=/soft/mysql-5.7.22/conf \
-DWITH_MYISAM_STORAGE_ENGINE=0 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=0 \
-DWITH_READLINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=/soft/src/mysql-5.7.22/boost/boost_1_59_0

编译选项说明:

选项 说明
CMAKE_INSTALL_PREFIX 安装路径
MYSQL_UNIX_ADDR Socket文件路径
MYSQL_DATADIR 数据目录
SYSCONFDIR 配置文件目录
WITH_MYISAM_STORAGE_ENGINE 是否启用MyISAM引擎
WITH_INNOBASE_STORAGE_ENGINE 是否启用InnoDB引擎
WITH_MEMORY_STORAGE_ENGINE 是否启用Memory引擎
MYSQL_TCP_PORT TCP端口
ENABLED_LOCAL_INFILE 允许LOAD DATA LOCAL INFILE
WITH_PARTITION_STORAGE_ENGINE 是否启用分区引擎
EXTRA_CHARSETS 额外字符集
DEFAULT_CHARSET 默认字符集
DEFAULT_COLLATION 默认排序规则
WITH_BOOST Boost库路径

编译和安装

1
2
3
4
5
# 编译(使用多核加速,-j参数为CPU核心数)
[root@sql mysql-5.7.22]# make -j$(nproc)

# 安装
[root@sql mysql-5.7.22]# make install

编译时间: 根据服务器性能,编译时间可能需要30分钟到2小时。

3.3 完成后基本优化

1
2
3
4
5
6
7
8
# 创建软链接
[root@sql ~]# ln -s /soft/mysql-5.7.22 /soft/mysql

# 创建数据目录
[root@sql ~]# mkdir -p /soft/mysql/data

# 设置目录权限
[root@sql ~]# chown -R mysql.mysql /soft/mysql

3.4 准备MySQL基础配置文件

1
2
3
4
5
# 创建配置目录
[root@sql ~]# mkdir -p /soft/mysql/conf

# 编辑MySQL配置文件
[root@sql ~]# vim /etc/my.cnf

配置文件示例:

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
[mysqld]
# 安装目录
basedir=/soft/mysql

# 数据目录
datadir=/soft/mysql/data

# 端口
port=3306

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 错误日志
log-error=/soft/mysql/data/error.log

# PID文件
pid-file=/soft/mysql/data/mysql.pid

# Socket文件
socket=/soft/mysql/data/mysql.sock

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4
socket=/soft/mysql/data/mysql.sock

3.5 拷贝MySQL程序启动文件

1
2
3
4
5
6
7
8
9
10
11
12
13
# 拷贝官方准备的启动脚本
[root@sql ~]# cp /soft/mysql/support-files/mysql.server /etc/init.d/mysqld

# 添加为系统服务,并设定开机自启动
[root@sql ~]# chkconfig --add mysqld
[root@sql ~]# chkconfig mysqld on

# 修改启动脚本中的路径
[root@sql ~]# sed -i 's|^basedir=|basedir=/soft/mysql|' /etc/init.d/mysqld
[root@sql ~]# sed -i 's|^datadir=|datadir=/soft/mysql/data|' /etc/init.d/mysqld

# 验证配置
[root@sql ~]# grep -E "^basedir=|^datadir=" /etc/init.d/mysqld

3.6 初始化MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 初始化MySQL(使用--initialize-insecure表示root无密码)
[root@sql ~]# /soft/mysql/bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/soft/mysql \
--datadir=/soft/mysql/data

# 启动MySQL
[root@sql ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

# 为mysql命令添加环境变量,以便后续简化执行命令
[root@sql ~]# echo "export PATH=/soft/mysql/bin:\$PATH" >> /etc/profile

# 使配置生效
[root@sql ~]# source /etc/profile

# 验证命令
[root@sql ~]# which mysql
/soft/mysql/bin/mysql

3.7 连接数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 源码编译MySQL默认root没有密码
[root@sql ~]# mysql -uroot

# 查看数据库
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

# 设置root密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bgx123.com';
Query OK, 0 rows affected (0.00 sec)

4. 变更数据库密码

4.1 更改root密码

方式1: 使用mysqladmin命令(需要知道原密码)

1
2
3
4
5
6
7
# 使用mysqladmin修改密码
[root@sql ~]# mysqladmin -uroot -pBgx123.com password 'Bgx111.com'
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

# 使用新密码登录
[root@sql ~]# mysql -uroot -pBgx111.com
mysql>

安全提示: 警告信息提示密码以明文形式发送,建议使用SSL连接。

方式2: 登录MySQL后修改

1
2
3
4
5
6
7
8
9
10
11
12
13
# 登录MySQL
[root@sql ~]# mysql -uroot -pBgx123.com

# 修改密码(MySQL 5.7.6+)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bjtest123.com';
Query OK, 0 rows affected (0.01 sec)

# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 退出
mysql> exit;

方式3: 使用UPDATE语句修改(不推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 登录MySQL
[root@sql ~]# mysql -uroot -pBgx123.com

# 修改密码(MySQL 5.7.6+)
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('Bjtest123.com') WHERE user='root' AND host='localhost';
Query OK, 1 row affected, 1 warning (0.01 sec)

# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 退出
mysql> exit;

注意: PASSWORD()函数在MySQL 5.7.6+中已废弃,建议使用ALTER USER语句。

4.2 忘记MySQL root密码

如果忘记了MySQL root密码,可以通过跳过授权表的方式重置密码。

步骤1: 修改配置文件

1
2
# 编辑MySQL配置文件
[root@sql ~]# vim /etc/my.cnf

添加跳过授权表配置:

1
2
[mysqld]
skip-grant-tables # 新增跳过授权表

步骤2: 重启数据库

1
2
3
4
5
# 重启数据库生效
[root@sql ~]# systemctl restart mysqld

# 或使用启动脚本
[root@sql ~]# /etc/init.d/mysqld restart

步骤3: 无密码登录并查看用户表

1
2
3
4
5
6
7
8
9
10
11
12
13
# 无密码登录
[root@sql ~]# mysql -uroot

# 查看用户表字段
mysql> SELECT user, host, authentication_string FROM mysql.user;
+---------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *C786BB788F276CD53317C80C1957E5F5696751F0 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

步骤4: 更新密码

MySQL 5.7.6+版本更新密码方式:

1
2
3
4
5
6
7
8
9
10
# 更新密码
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('Bgx123.com') WHERE user='root' AND host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)

# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 退出
mysql> exit;

MySQL 5.7.6之前版本更新密码方式:

1
2
3
4
5
6
7
8
9
10
# 更新密码
mysql> UPDATE mysql.user SET password=PASSWORD('Bgx123.com') WHERE user='root' AND host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)

# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

# 退出
mysql> exit;

步骤5: 恢复配置文件并重启

1
2
# 编辑配置文件,注释掉skip-grant-tables
[root@sql ~]# vim /etc/my.cnf
1
2
[mysqld]
#skip-grant-tables # 注释掉
1
2
# 重启数据库生效
[root@sql ~]# systemctl restart mysqld

步骤6: 使用新密码登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 使用新密码登录数据库
[root@sql ~]# mysql -uroot -pBgx123.com

# 验证登录
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit;

4.3 密码管理最佳实践

使用ALTER USER语句(推荐)

1
2
3
4
5
6
7
8
# MySQL 5.7.6+推荐方式
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';

# 设置密码过期策略
ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

# 设置密码永不过期
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

密码复杂度要求

1
2
3
4
5
6
7
8
9
# 查看密码验证策略
SHOW VARIABLES LIKE 'validate_password%';

# 设置密码策略
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

多用户密码管理

1
2
3
4
5
6
# 为不同用户设置不同密码
ALTER USER 'app_user'@'%' IDENTIFIED BY 'AppPassword123!';
ALTER USER 'readonly_user'@'%' IDENTIFIED BY 'ReadOnlyPass123!';

# 查看所有用户
SELECT user, host FROM mysql.user;

5. 安装方式对比

5.1 安装方式对比表

安装方式 优点 缺点 适用场景
YUM安装 简单快速、自动依赖、易于管理 版本受限、定制性差 开发测试、快速部署
二进制安装 安装快速、版本可控、无需编译 平台相关、定制性一般 生产环境、标准化部署
源码编译 完全可控、性能优化、功能定制 编译时间长、依赖复杂 特殊需求、性能优化

5.2 选择建议

选择YUM安装:

  • 快速部署需求
  • 开发测试环境
  • 不需要特殊定制
  • 学习环境

选择二进制安装:

  • 生产环境部署
  • 需要特定版本
  • 标准化部署
  • 平衡性能和部署时间

选择源码编译:

  • 需要特定功能
  • 性能优化需求
  • 学习研究
  • 特殊环境要求

6. 安装后配置优化

6.1 基础安全配置

1
2
3
4
5
6
7
8
9
# 删除匿名用户
DELETE FROM mysql.user WHERE user='';

# 删除test数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';

# 刷新权限
FLUSH PRIVILEGES;

6.2 性能优化配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# /etc/my.cnf优化配置
[mysqld]
# InnoDB缓冲池(建议为内存的70-80%)
innodb_buffer_pool_size = 2G

# 连接数
max_connections = 500

# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# Binlog
log-bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7

6.3 服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 启动服务
systemctl start mysqld
# 或
/etc/init.d/mysqld start

# 停止服务
systemctl stop mysqld
# 或
/etc/init.d/mysqld stop

# 重启服务
systemctl restart mysqld
# 或
/etc/init.d/mysqld restart

# 查看状态
systemctl status mysqld

# 开机自启
systemctl enable mysqld
# 或
chkconfig mysqld on

7. 常见问题排查

7.1 安装问题

问题1: 初始化失败

1
2
3
4
5
6
7
8
9
# 检查数据目录权限
ls -ld /soft/mysql/data
chown -R mysql.mysql /soft/mysql/data

# 检查磁盘空间
df -h

# 检查错误日志
tail -f /var/log/mysqld.log

问题2: 启动失败

1
2
3
4
5
6
7
8
9
# 检查配置文件语法
mysqld --validate-config --defaults-file=/etc/my.cnf

# 检查端口占用
netstat -tunlp | grep 3306
lsof -i :3306

# 检查错误日志
tail -f /var/log/mysqld.log

7.2 连接问题

问题1: 无法连接

1
2
3
4
5
6
7
8
# 检查服务状态
systemctl status mysqld

# 检查防火墙
firewall-cmd --list-all

# 检查用户权限
mysql -uroot -p -e "SELECT user, host FROM mysql.user;"

问题2: 密码错误

1
2
# 重置密码(参考4.2节)
# 使用skip-grant-tables方式重置

实战优化