centos8 安装解压版 mysql8

MySQL8 安装包

1
2
mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
存放目录 : /opt/softs/mysql

MySQL安装

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
30
31
32
33
34
35
36
37
# 依赖安装
sudo yum -y install libaio
sudo yum -y install ncurses-compat-libs
# mysql 要求的版本是libtinfo.so.5
sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

# 解压并重命名
sudo tar -xvf /opt/softs/mysql/mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
sudo mv /opt/softs/mysql/mysql-8.0.22-linux-glibc2.12-x86_64 /opt/softs/mysql/mysql8

# 创建用于运行MySQL的组和用户
sudo groupadd mysql # 创建MySQL组
sudo useradd -r -g mysql -s /bin/false mysql # 添加mysql用户
usermod -G mysql $USER # 把当前登录用户加入mysql组

# 创建导入导出操作安全目录
# 该目录用于使具有FILE权限的用户可以安全地执行导入导出操作
sudo mkdir /opt/softs/mysql/mysql8/mysql-files
sudo chown mysql:mysql /opt/softs/mysql/mysql8/mysql-files
sudo chmod 750 /opt/softs/mysql/mysql8/mysql-files

# 创建数据目录
sudo mkdir /opt/softs/mysql/mysql8/data
sudo chown mysql:mysql /opt/softs/mysql/mysql8/data
sudo chmod 750 /opt/softs/mysql/mysql8/data

# 创建MySQL服务启动需要用到的静态配置文件(固定名称)
# my.cnf 文件内容下面介绍
sudo touch /etc/my.cnf
sudo chown root:root /etc/my.cnf
sudo chmod 644 /etc/my.cnf

# 修改mysql安装目录权限
sudo chmod -R 777 /opt/softs/mysql/mysql8

# 安装mysql(要记住密码)
sudo /opt/softs/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console

/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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[mysqld]
# 设置3306端口
port=3306
 
# 设置mysql的安装目录
basedir=/opt/softs/mysql/mysql8
 
# 设置mysql数据库的数据的存放目录
datadir=/opt/softs/mysql/mysql8/data
 
# soket文件,本地连接时使用
socket=/opt/softs/mysql/mysql8/data/mysql.sock

# 错误日志
log-error=/opt/softs/mysql/mysql8/data/mysqld_error.log
 
# pid文件
pid-file=/opt/softs/mysql/mysql8/data/mysqld.pid
 
# 创建导入导出操作安全目录
secure_file_priv=/opt/softs/mysql/mysql8/mysql-files
 
# 允许最大连接数
max_connections=200
 
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
 
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
 
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
default-time-zone='+08:00'
# 慢查询配置
slow_query_log=ON
slow_query_log_file =/opt/softs/mysql/mysql8/data/slow.log
# 单位时秒
long_query_time=2  

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
#socket=/opt/softs/mysql/mysql8/data/mysql.sock

使用systemd管理MySQL8

1
2
3
4
5
6
7
8
9
# 在系统服务单元配置文件存放目下创建MySQL的服务单元配置文件
# mysqld.service 内容下边介绍
# 配置之后,此时我们已经可以通过systemctl工具手工管理MySQL服务
# systemctl {start|stop|restart|status} mysqld.service
sudo touch /usr/lib/systemd/system/mysqld.service
sudo chmod 644 /usr/lib/systemd/system/mysqld.service

sudo systemctl start mysqld.service # 开启服务
sudo systemctl status mysqld.service # 查看状态

mysqld.service文件内容:

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
30
31
32
33
34
35
36
37
38
[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]
# mysql 用户组和用户名
User=mysql
Group=mysql

# Have mysqld write its state to the systemd notify socket
Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service 配置MySQL启动命令
ExecStart=/opt/softs/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false

启动服务报错解决:

  • 错误内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@tomcatCloud-2 system]# systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.
[root@tomcatCloud-2 system]# systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2020-10-25 16:52:31 CST; 14s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 2239 ExecStart=/opt/softs/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS (code=exited, status=1/FAILURE)
 Main PID: 2239 (code=exited, status=1/FAILURE)
   Status: "Server startup in progress"
    Error: 2 (没有那个文件或目录)

10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794624Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794724Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794763Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794801Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794921Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.794992Z 0 [ERROR] [MY-010119] [Server] Aborting
10月 25 16:52:31 tomcatCloud-2 mysqld[2239]: 2020-10-25T08:52:31.795446Z 0 [System] [MY-010910] [Server] /opt/softs/mysql/mysql8/bin/mysqld: Shutdown complete (mysqld 8.>
10月 25 16:52:31 tomcatCloud-2 systemd[1]: mysqld.service: Main process exited, code=exited, status=1/FAILURE
10月 25 16:52:31 tomcatCloud-2 systemd[1]: mysqld.service: Failed with result 'exit-code'.
10月 25 16:52:31 tomcatCloud-2 systemd[1]: Failed to start MySQL Server.
  • 解决方法 :

上面的错误点 :The innodb_system data file ‘ibdata1’ must be writable;
就是 文件ibdata1(在//opt/softs/mysql/mysql8/data目录里)没有写入权限

1
2
# 就是给ibdata1 添加权限
chmod -R 777 /opt/softs/mysql/mysql8

修改root等操作

1
2
登录mysql : mysql -u root -p
然后输入初始密码

1
2
3
4
5
6
7
alter user 'root'@'localhost'IDENTIFIED BY '123456'; -- 修改root 密码
grant all privileges on *.* to 'root'@'%'; -- 授于 root@localhost 所有权限

-- 设置远程登录
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
grant all privileges on *.* to 'root'@'%';
flush privileges;

mysql一些操作

1
2
3
4
5
6
7
8
9
10
-- 查询所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
-- 创建用户
create user 'test'@'%' identified by '123456';
-- 用户授权
grant all privileges on *.* to 'test'@'%' ;
-- 刷新权限
flush privileges;
-- 删除用户
drop user 'test'@'%';

可选配置( 这好像是 service 服务管理 mysql 的配置 )

1
修改 /opt/softs/mysql/mysql8/support-files/mysql.server
1
2
3
4
# basedir=
basedir=/opt/softs/mysql/mysql8
# datadir=
datadir=/opt/softs/mysql/mysql8/data
1
2
3
4
5
6
7
sudo cp /opt/softs/mysql/mysql8/support-files/mysql.server  /etc/init.d/mysqld
sudo chmod 777 /etc/init.d/mysqld

chkconfig --list mysqld # 检查自启动项列表中没有mysqld
chkconfig --add mysqld  # 如果没有就添加mysqld
chkconfig mysqld on     # 设置开机启动
service mysqld start    #启动测试