mysql#003#编译安装指南

记录下安装MySQL-8.2.0到Ubuntu22.04服务器上。

下载MySQL源代码

点击 https://dev.mysql.com/downloads/mysql 进入下载页面,按照下图选择源代码版本。

因为MySQL需要使用boost库,所以mysql-8.2.0.tar.gz和mysql-boost-8.2.0.tar.gz的区别只是后者包中包含了boost库代码,也可以选择前者而自行下载boost。为了方便我选择下载mysql-boost-8.2.0.tar.gz版本。

安装依赖

1
2
3
4
5
6
7
$ sudo apt install cmake
$ sudo apt-get install libssl-dev
$ sudo apt install libncurses5-dev
$ sudo apt install bison
$ sudo apt install dpkg-dev
$ sudo apt install pkg-config
$ sudo apt install gcc g++

创建用户和所需目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建用户组
$ sudo groupadd mysql

# 创建mysql用户,所属组为mysql
$ sudo useradd -s /bin/bash -m -g mysql mysql
$ sudo chmod 0755 /home/mysql

# 创建安装目录
$ mkdir -p /home/mysql/apps/mysql/mysql-8.2.0
$ sudo chown -R mysql:mysql /home/kevintian/apps/mysql/mysql-8.2.0

# 切换到mysql用户,并创建目录
$ su mysql
$ cd /home/mysql/apps/mysql/mysql-8.2.0
$ mkdir bin conf data logs mysql tmp

# 解压mysql源代码
$ cd /home/mysql/objs/mysql
$ tar -zxvf mysql-8.2.0.tar.gz

编译和安装

第一步:使用cmake进行配置,生成Makefile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cd mysql-8.2.0
$ cmake \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/home/mysql/apps/mysql/mysql-8.2.0/mysql \
-DMYSQL_UNIX_ADDR=/home/mysql/apps/mysql/mysql-8.2.0/mysql.sock \
-DMYSQL_DATADIR=/home/mysql/apps/mysql/mysql-8.2.0/data \
-DSYSCONFDIR=/home/mysql/apps/mysql/mysql-8.2.0/conf \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DENABLE_DEBUG_SYNC=0 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_DEBUG=0 \
-DWITH_SSL=yes \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_BOOST=boost

如下图提示配置没有错误,在/home/mysql/objs/mysql-8.2.0/目录下可以看到生成的Makefile。

第二步:我们使用如下命令进行编译

1
$ make -j4 

看到如上的信息之后,表明编译成功。

第三步:安装到指定的目录。

1
$ make install

看到上述消息之后,说明安装成功。

第四步:拷贝后续使用的启动脚本文件

1
2
$ cp support-files/mysql.server /home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server
$ chmod +x /home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server

设置环境变量

编辑 /etc/profile 文件,添加内容:

1
2
3
export MYSQL_HOME=/home/mysql/apps/mysql/mysql-8.2.0/mysql

export PATH=$MYSQL_HOME/bin:$PATH

编辑MysQL配置文件

在/home/mysql/apps/mysql/mysql-8.2.0/conf 目录下创建文件my.cnf,并配置如下内容。

1
2
3
4
5
6
7
8
[mysqld]
user=mysql
port=3306
basedir=/home/mysql/apps/mysql/mysql-8.2.0/mysql
datadir=/home/mysql/apps/mysql/mysql-8.2.0/data
tmpdir=/home/mysql/apps/mysql/mysql-8.2.0/tmp
socket=/home/mysql/apps/mysql/mysql-8.2.0/mysql.sock
log_error=/home/mysql/apps/mysql/mysql-8.2.0/logs/error.log

初始化MySQL

1
$ mysqld --defaults-file=/home/mysql/apps/mysql/mysql-8.2.0/conf/my.cnf --initialize-insecure --user=mysql

上述命令执行完毕之后,检查下初始化日志,看看有没有错误:

然后我们看下MySQL data目录的初始化情况:

MySQL手工启动

第一种方法:使用mysqld_safe

1
2
3
$ mysqld_safe --defaults-file=/home/mysql/apps/mysql/mysql-8.2.0/conf/my.cnf &

$ mysqladmin -uroot shutdown

第二种方法:使用mysql.server
使用support-files目录下生成的mysql.server文件,编译完成后在上述安装阶段,我们已经将其拷贝到了mysql的bin目录下。
后续我们将/home/mysql/apps/mysql/mysql-8.2.0/bin 目录加入PATH之后,可以直接使用该命令(非mysql用户,使用sudo)。

1
2
3
4
5
$ sudo /home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server

$ sudo /home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server start

$ sudo /home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server stop

MySQL自动启动

第一步:创建/lib/systemd/system/mysql.service文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
Description=MySQL
SourcePath=/home/mysql/apps/mysql/mysql-8.2.0
Before=shutdown.target
[Service]
User=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server start
ExecStop=/home/mysql/apps/mysql/mysql-8.2.0/bin/mysql.server stop
LimitNOFILE = 65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false
[Install]
WantedBy=multi-user.target

第二步:使用如下命令使得mysql.service生效

1
$ sudo systemctl enable mysql

第三步:重新启动服务器,使用如下命令验证myysql.service已经生效

1
$ sudo systemctl status mysql

另外还可以使用如下命令,手工启动:

1
2
3
$ sudo systemctl start mysql

$ sudo systemctl stop mysql

客户端连接测试

1
$ mysql -uroot

对编译选项的说明

选项 DEFAULT_CHARSET 和 DEFAULT_COLLATION
第一次编译时,我按 “-DDEFAULT_CHARSET=utf8” 和“-DDEFAULT_COLLATION=utf8_general_ci”进行配置,然后执行初始化时,查看日志有这样的警告。

查了下官方资料 ,发现参数被废弃了,改为如下值,然后重新编译就没有错误提示了。

1
2
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \