MySQL Archive(Linux-Generic)安装

本文选择 TAR Archive(Linux-Generic) 包进行安装,好处是可以自定义安装目录以及环境变量,在单台服务器上启动多个MySQL实例。

不同操作系统的细节可能有所差异,但大致都是下载、解压、修改配置、初始化、修改root密码、按需创建账户和授权几个步骤。

  1. 如果没有特殊需求,直接前往MySQL官网下载对应平台的通用二进制包即可,不需要自己编译。如果下载缓慢,可以在阿里云、TUNA等镜像站下载。

  2. 随着使用时长增加,磁盘空间的占用也在增长。在安装之前需要根据服务器磁盘大小来规划好安装目录以及数据、日志、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

  3. 下载完成后校验文件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
  4. 安全起见,创建普通用户运行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
  5. 新增运行配置配置文件

    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
  6. 初始化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/
  7. 等待执行完成,然后查看运行日志,出现以下日志说明初始化已经完成了,获取初始化的 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用户的密码,使用此密码登录修改密码、授权范围。

  8. 启动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文件,直接使用 mysqlmysqladmin等命令会报以下错误提示信息:

    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
  9. 创建开机自启动(可选)

    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.service

    systemctl命令说明:

    • systemctl enable mysql.service —设置开启自启动
    • systemctl disable mysql.service —设置开启自启动
    • systemctl start mysql.service —开启此服务
    • systemctl stop mysql.service —关闭此服务
    • systemctl status mysql.service —查看服务状态

Windows下使用zip包安装的一些步骤/注意事项,仅用于本地调试。

  1. 配置文件 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
  2. 打开终端进行初始化、安装服务(需要管理员权限,用于后台运行)。目前还没发现有其他方法可以后台运行,Windows下不支持以 --daemonize 守护进程的参数启动。

    1
    2
    3
    4
    5
    6
    7
    8
    D:\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.