部分内容参考官方文档:MySQL 8.0 Secure Deployment Guide
1、MySQL安装前规划
- 在服务器中创建两个文件夹,/application:用于存储二进制应用程序,/data:用于存储数据库数据。
- 建议将 MySQL 的应用程序和数据分别存放在不同的硬盘或分区上,这样有利于保证数据的安全性,即使系统出现故障,也不会影响到数据的安全。
2、安装MySQL
为兼容在所有 Linux 版本中安装,在此介绍 Generic (相当于 “绿色版” )版本的安装与配置
2.1、安装前准备
-
首先在 MySQL 官方下载合适的版本
-
将 Generic 版本的软件包上传到服务器并解压,然后将解压后的软件包重命名为便于记忆的名称并移动到用于存放应用程序的目录中
-
配置环境变量
[root@localhost]# vi /etc/profile export PATH=/application/mysql/bin:$PATH [root@localhost]# source /etc/profile
-
创建MySQL用户
创建用户,且不允许用户登录系统
[root@localhost soft]# useradd mysql -s /sbin/nologin
到此,二进制的 MySQL 应用程序就算安装完毕,执行 mysql -V
如果能正确输出 MySQL 的版本号,说明软件部署已经成功。如果执行以上命令时出现 “mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory” ,说明系统缺少 “ libtinfo.so.5” 文件,只需在 /lib64 下执行 ln -s libtinfo.so.6.1 libtinfo.so.5
即可,如果在 /lib64 下没有 “libtinfo.so.6.1” 文件,可以使用 yum 安装该文件。
2.2、创建MySQL配置文件
[root@localhost ~]# vi /etc/my.cnf
# 服务器端配置
[mysqld]
# 软件安装位置
basedir=/application/mysql
# 数据存放位置
datadir=/data/mysql/data
# socket文件路径
socket=/tmp/mysql.sock
# 端口号
port=3306
# 错误日志路径
log-error=/data/mysql/data/localhost.localdomain.err
# 用户
user=mysql
local_infile=OFF
[mysql]
socket=/tmp/mysql.sock
2.3、初始化数据库
-
创建数据存放目录,并做授权
[root@localhost]# cd /data [root@localhost data]# mkdir -p mysql/data [root@localhost data]# chown mysql:mysql mysql/data/ [root@localhost data]# chmod 750 mysql/data
-
初始化数据库
# 5.6版本 [root@localhost ~]# /application/mysql/scripts/mysql_install_db # 5.7版本以后 [root@localhost mysql]# cd /data/mysql/ [root@localhost mysql]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure # 说明: # --initialize 参数 ## 1、对密码复杂度进行定义:12位、4种 ## 2、密码过期时间:180天 ## 3、给root@localhost用户设置临时密码 ## 4、如果需要设置无任何限制,无初始密码可使用"--initialize-insecure"参数 # --user:指定用户 # --basedir:应用程序安装目录 # --datadir:数据存放目录
2.4、启动数据库
# sys-v启动数据库
[root@localhost ~]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
# 将MySQL软件路径和数据库存储路径修改为实际路径即可
basedir=/application/mysql
datadir=/data/mysql/data
[root@localhost ~]# service mysqld start
# systemd启动数据库
[root@localhost ~]# vi /etc/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.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
# 此处设置mysqld程序的位置
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
3、mysql启动故障分析
-
查看错误日志
启动错误日志路径:DATA_PATH/[hostname.err] -
使用命令启动服务
如果错误日志中没有记录,可以使用命令行启动服务,此时可以将所有启动信息打印到屏幕上[root@localhost ~]# /application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
4、修改本地管理员密码
[root@localhost ~]# mysqladmin -uroot -p password 'new_password'
5、重置本地管理员密码
-
关闭数据库
-
启动数据库到维护模式
mysqld_safe --skip-grant-tables --skip-networking &
参数说明
- –skip-grant-tables:跳过授权表
- –skip-networking:跳过网络
-
登录并修改密码
# 加载授权表 mysql> flush privileges; # 修改用户密码 mysql> alter user root@'localhost' identified by '123';
-
关闭数据库,重新正常启动
此处关闭和启动数据库需要使用 sys-v 方式启动,systemd 可能无法正常关闭和启动数据库