本文选择 TAR Archive(Linux-Generic) 包进行安装,好处是可以自定义安装目录以及环境变量,在单台服务器上启动多个MySQL实例。
不同操作系统的细节可能有所差异,但大致都是下载、解压、修改配置、初始化、修改root密码、按需创建账户和授权几个步骤。
如果没有特殊需求,直接前往MySQL官网下载对应平台的通用二进制包即可,不需要自己编译。如果下载缓慢,可以在阿里云、TUNA等镜像站下载。
随着使用时长增加,磁盘空间的占用也在增长。在安装之前需要根据服务器磁盘大小来规划好安装目录以及数据、日志、binlog目录。使用
df -h
命令查看服务器磁盘大小。1
2
3
4
5
6
7
8
9
10
11[root@hadoop2 home]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 21M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 5.1G 45G 11% /
/dev/sda1 1014M 150M 865M 15% /boot
/dev/mapper/centos-home 418G 24G 395G 6% /home
tmpfs 13G 0 13G 0% /run/user/0
tmpfs 13G 0 13G 0% /run/user/1000这里可以看到
/home
目录的可用空间是最大的,将MySQL安装到此目录,相关数据也存储在此目录下。规划如下:MySQL安装位置为
/home/mysql-5.7.44
,数据目录为/home/mysql-5.7.44/data
,
binlog目录为/home/mysql-5.7.44/binlog
,运行配置文件绝对路径为/home/mysql-5.7.44/my.cnf
,
socket文件绝对路径为/home/mysql-5.7.44/mysql.sock
,
PID文件绝对路径为/home/mysql-5.7.44/mysqld.pid
,
运行日志绝对路径为/home/mysql-5.7.44/mysqld.log
。下载完成后校验文件MD5,输出值应与官网提供的一致。确认无误后解压
1
2
3
4[root@hadoop2 home]# md5sum mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
d7c8436bbf456e9a4398011a0c52bc40 mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
[root@hadoop2 home]# tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
[root@hadoop2 home]# mv mysql-5.7.44-linux-glibc2.12-x86_64 mysql-5.7.44 && cd mysql-5.7.44安全起见,创建普通用户运行MySQL服务,不以root用户运行。创建的用户可根据需求自行添加密码。
1
2
3
4# 创建普通用户
[root@hadoop2 mysql-5.7.44]# groupadd mysql && useradd -r -g mysql mysql
# 创建数据目录、binlog目录
[root@hadoop2 mysql-5.7.44]# mkdir data && mkdir binlog新增运行配置配置文件
1
[root@hadoop2 mysql-5.7.44]# vi my.cnf
向配置文件中添加以下内容,binlog可根据需求决定是否开启,同时要根据磁盘空间和业务需求设置合适的清理时间。
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[mysqld]
# 普通用户启动
user=mysql
# 监听地址根据实际需求决定,如不需要对外提供服务填写127.0.0.1即可
bind-address=0.0.0.0
# 监听端口根据实际需求决定,如启动多个实例要注意端口冲突的问题
port=3306
# 设置日志路径,注意路经需要mysql用户有权限写
log-bin = /home/mysql-5.7.44/binlog/mysql-bin.log
# 配置serverid
server-id=1
# 设置日志三种格式:STATEMENT、ROW、MIXED
binlog_format = row
# 设置binlog清理时间
expire_logs_days = 7
# binlog每个日志文件大小
max_binlog_size = 500m
# binlog缓存大小
binlog_cache_size = 4m
# 最大binlog缓存大小
max_binlog_cache_size = 3096m
basedir=/home/mysql-5.7.44
datadir=/home/mysql-5.7.44/data
socket=/home/mysql-5.7.44/mysql.sock
symbolic-links=0
explicit_defaults_for_timestamp=true
log-error=/home/mysql-5.7.44/mysqld.log
pid-file=/home/mysql-5.7.44/mysqld.pid
character-set-server=utf8mb4
# 允许的最大连接数
max_connections=300
init_connect='SET NAMES utf8mb4'
innodb_thread_concurrency=16
innodb_buffer_pool_size=4G
query_cache_size=0
query_cache_type=0
max_connect_errors=20
thread_cache_size=128
# 根据业务服务地区设置时区
default-time-zone=+08:00初始化MySQL之后,再递归授权整个目录以及子目录的权限给mysql用户。
1
2
3
4# 初始化
[root@hadoop2 mysql-5.7.44]# bin/mysqld --defaults-file=/home/mysql-5.7.44/my.cnf --initialize
# 授权目录、文件
[root@hadoop2 mysql-5.7.44]# chown -R mysql:mysql /home/mysql-5.7.44/等待执行完成,然后查看运行日志,出现以下日志说明初始化已经完成了,获取初始化的 MySQL root用户密码,使用此密码登录及修改密码。
1
2
3
4
5
6
7
8
9
10[root@hadoop2 mysql-5.7.44]# cat mysqld.log
2023-12-20T09:29:42.139088Z 0 [Warning] InnoDB: New log files created, LSN=45790
2023-12-20T09:29:43.140150Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2023-12-20T09:29:43.464836Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 4ec64a39-9f1a-11ee-9a68-000c299914ff.
2023-12-20T09:29:43.527716Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2023-12-20T09:29:44.338905Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2023-12-20T09:29:44.338923Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2023-12-20T09:29:44.342481Z 0 [Warning] CA certificate ca.pem is self signed.
2023-12-20T09:29:44.592295Z 1 [Note] A temporary password is generated for root@localhost: rgtgdmJh_5gr其中
rgtgdmJh_5gr
就是初始化后MySQL的root用户的密码,使用此密码登录修改密码、授权范围。启动MySQL服务,连接并修改密码,根据实际需求修改连接配置。
1
2
3
4# 启动MySQL
[root@hadoop2 mysql-5.7.44]# ./bin/mysqld --defaults-file=/home/mysql-5.7.44/my.cnf --daemonize
# 连接MySQL
[root@hadoop2 mysql-5.7.44]# ./bin/mysql -u root -p --socket=/home/mysql-5.7.44/mysql.sock由于运行配置文件中指定了socket文件的位置,默认位置
/tmp/mysql.sock
没有socket文件,直接使用mysql
、mysqladmin
等命令会报以下错误提示信息:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
所以执行命令时需要附加
--socket
参数指定socket文件的路径,如mysql -u root -p --socket=/home/mysql-5.7.44/mysql.sock
。连接成功后修改密码,如不需要开放外部访问,修改密码后安装过程就完成了。
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[root@hadoop2 mysql-5.7.44]# ./bin/mysql -u root -p --socket=/home/mysql-5.7.44/mysql.sock
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 556
Server version: 5.7.44-log MySQL Community Server (GPL)
Copyright (c) 2000, 2023, 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> ALTER user "root"@"localhost" identified by "password";
Query OK, 0 rows affected (0.01 sec)
# 开放任意地址访问(可选)
mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 刷新权限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
# 退出
mysql> quit
Bye创建开机自启动(可选)
MySQL目录下有个官方提供的
./support-files/mysql.server
文件,如果没有指定运行配置文件路径、socket文件路径等可以直接使用这个文件。1
cp /usr/local/mysql/.support-files/mysql.server /etc/init.d/mysqld
由于指定了运行配置文件、socket文件的路径,修改这个官方提供的文件比较麻烦,可以使用
systemctl
替代。自定义
mysql.service
服务,并设置开机自启动。1
2
3
4# 关闭MySQL服务
[root@hadoop2 mysql-5.7.44]# ./bin/mysqladmin --socket=/home/mysql-5.7.44/mysql.sock -u root -p"password" shutdown
# 添加自定义服务配置
[root@hadoop2 mysql-5.7.44]# vi /lib/systemd/system/mysql.service向文件中添加以下配置
1
2
3
4
5
6
7
8
9
10
11
12[Unit]
Description=mysqlservice
After=network.target
[Service]
WorkingDirectory= /home/mysql-5.7.44
ExecStart= /home/mysql-5.7.44/bin/mysqld --defaults-file=/home/mysql-5.7.44/my.cnf --daemonize
User= mysql
Group= mysql
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target保存配置后,重新加载并开启自启动。
1
2[root@hadoop2 mysql-5.7.44]# systemctl daemon-reload
[root@hadoop2 mysql-5.7.44]# systemctl enable mysql.servicesystemctl命令说明:
- systemctl enable mysql.service —设置开启自启动
- systemctl disable mysql.service —设置开启自启动
- systemctl start mysql.service —开启此服务
- systemctl stop mysql.service —关闭此服务
- systemctl status mysql.service —查看服务状态
Windows下使用zip包安装的一些步骤/注意事项,仅用于本地调试。
配置文件
my.ini
,放在 MySQL主目录下,不需要放到主目录/bin
下。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[mysqld]
# 监听地址根据实际需求决定,如不需要对外提供服务填写127.0.0.1即可
bind-address=127.0.0.1
# 监听端口根据实际需求决定,如启动多个实例要注意端口冲突的问题
port=3306
# 设置日志路径,注意路经需要mysql用户有权限写
log-bin = ../binlog/mysql-bin.log
# 配置serverid
server-id=1
# 设置日志三种格式:STATEMENT、ROW、MIXED(8.0.36后续版本可能弃用此参数)
#binlog_format = row
# 设置binlog清理时间(8.0.36后续版本可能弃用此参数,考虑使用 binlog_expire_logs_seconds 参数替代)
#expire_logs_days = 7
binlog_expire_logs_seconds = 25200
# binlog每个日志文件大小
max_binlog_size = 500m
# binlog缓存大小
binlog_cache_size = 4m
# 最大binlog缓存大小
max_binlog_cache_size = 3096m
basedir=D:\devtools\mysql\mysql-8.0.36-winx64
datadir=../data
#socket=/home/mysql-5.7.44/mysql.sock
#8.0.36后续版本可能弃用此参数,考虑使用 --skip-symbolic-links 参数替代
#symbolic-links=0
explicit_defaults_for_timestamp=true
log-error=../logs/mysqld.log
#pid-file=/home/mysql-5.7.44/mysqld.pid
character-set-server=utf8mb4
max_connections=4000
init_connect='SET NAMES utf8mb4'
innodb_thread_concurrency=16
innodb_buffer_pool_size=4G
max_connect_errors=20
thread_cache_size=128
# 根据业务服务地区设置时区
default-time-zone=+08:00打开终端进行初始化、安装服务(需要管理员权限,用于后台运行)。目前还没发现有其他方法可以后台运行,Windows下不支持以
--daemonize
守护进程的参数启动。1
2
3
4
5
6
7
8D:\devtools\mysql\mysql-8.0.36-winx64\bin>mysqld --initialize --console
2024-01-18T15:05:36.324807Z 0 [System] [MY-013169] [Server] D:\devtools\mysql\mysql-8.0.36-winx64\bin\mysqld.exe (mysqld 8.0.36) initializing of server in progress as process 1996
2024-01-18T15:05:36.348699Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-01-18T15:05:36.874536Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-01-18T15:05:38.565738Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: un1or0%9=ipI
D:\devtools\mysql\mysql-8.0.36-winx64\bin>mysqld install
Service successfully installed.