记录下安装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
$ 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
$ su mysql $ cd /home/mysql/apps/mysql/mysql-8.2.0 $ mkdir bin conf data logs mysql tmp
$ 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 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
|
客户端连接测试

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

查了下官方资料 ,发现参数被废弃了,改为如下值,然后重新编译就没有错误提示了。
1 2
| -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
|