mysql-server-8.0.25的源码编译安装
##############
安装思路:
1)确认安装mysql的哪个分支,常见的有三大分支:Oracle官方的mysql server,Percona官方的mysql server(不支持在windows上安装,是mysql的提升,有较多的工具辅助),Mariadb官方的mysql server
2)确认操作系统是否支持,常见的操作系统有windows,macOS,CentOS,ubuntu等;
3)选择mysql的发行版本和分发格式,目前有5.5、5.6、5.7、8.0四个发行版本,分发格式有二进制和源码;通常咱们就选择GA版本,如果给业务安装,就用二进制版本安装,如果是dba安装到生产环境就用源码安装;
一、目前Oracle mysql8的发行版本使用由三个数字和一个可选后缀组成的版本名称构成。
第一个数字是8,表示主版本号;
第二个数字是0,表示次版本号;
第三个数字是25,表示发布系列的版本号;
二、可选后缀有:
dmr:开发里程碑的版本;
rc:通过所有内部测试的版本;
没有后缀:表示GA版本,没有严重错误的版本,即稳定版本,即生产环境的最佳版本。系列中的开发从 DMR 版本开始,然后是 RC 版本,最后达到 GA 状态版本。
三、分发格式:
通用二进制安装包:.tar.xz
源码安装包:.tar.gz
4)到官网下载指定版本和格式的mysql软件包;
5)安装mysql需要的依赖包和安装布局;
6)安装;
7)安装后配置;
MySQL 依赖于该libaio
库。如果此库未在本地安装,则数据目录初始化和后续服务器启动步骤将失败。如有必要,请使用适当的包管理器安装它。例如,在基于 Yum 的系统上:
shell> yum search libaio # search for info shell> yum install libaio # install library
Oracle Linux 8 / Red Hat 8 (EL8):这些平台默认不安装文件/lib64/libtinfo.so.5
,MySQL 客户端bin/mysql需要该文件来安装 包 mysql-VERSION-el7-x86_64.tar.gz
和 mysql-VERSION-linux-glibc2.12-x86_64.tar.xz
. 要解决此问题,请安装 ncurses-compat-libs
软件包:
shell> yum install ncurses-compat-libs
如果您之前使用操作系统本机包管理系统(例如 Yum 或 APT)安装了 MySQL,则使用本机二进制安装可能会遇到问题。确保您之前的 MySQL 安装已被完全删除(使用您的包管理系统),并且任何其他文件,例如旧版本的数据文件,也已被删除。您还应该检查配置文件,例如/etc/my.cnf
或/etc/mysql
目录并删除它们。
cmake
make
gcc
openssl
bison
安装前的布局:
1)配置管理和运行mysql的用户为:work(通常地,一般都不会使用root来管理mysql,因此咱们就创建work用户进行管理mysql)
mysql_user=work
2)配置mysql的端口号为:3306
mysql_port=3306
3)布局mysql安装相关目录:
配置mysql的安装根目录为:/home/${mysql_user}/mysql_${mysql_port} 配置mysql的存储数据目录为:/home/${mysql_user}/mysql_${mysql_port}/data 配置mysql的my.cnf目录为:/home/${mysql_user}/mysql_${mysql_port}/etc 配置mysql的临时目录为:/home/${mysql_user}/mysql_${mysql_port}/tmp 配置mysql的redo log目录为:/home/${mysql_user}/mysql_${mysql_port}/redolog 配置mysql的undo log目录为:/home/${mysql_user}/mysql_${mysql_port}/undolog 配置mysql的其他日志(binlog日志,error日志,慢查询日志等)目录为:/home/${mysql_user}/mysql_${mysql_port}/log
mysql_port=3306 mysql_user=work mysql_home=/home/${mysql_user} mysql_basedir=${mysql_home}/mysql_${mysql_port} mysql_datadir={mysql_basedir}/data mysql_etc=${mysql_basedir}/etc mysql_tmp=${mysql_basedir}/tmp mysql_redolog=${mysql_basedir}/redolog mysql_undolog=${mysql_basedir}/undolog mysql_log=${mysql_basedir}/log mysql_plugin=${mysql_basedir}/lib
源码安装所需要的软件包:
mysql_boost=/home/work/mysql_install/boost-xxx.tar.gz
源码安装的配置:
cmake .的配置选项:
安装的根目录配置: -DCMAKE_INSTALL_PREFIX=${mysql_home}
-DBUILD_CONFIG=mysql_release,忽略 libaio 检查
-DBUILD_CONFIG=mysql_release
此选项使用与 Oracle 用于为官方 MySQL 版本生成二进制分发版相同的构建选项配置源分发版。
-DOPTIMIZER_TRACE=1 支持优化器跟踪
googlemock 发行版的路径,用于基于 Google Test 的单元测试。选项值是分发 Zip 文件的路径。或者,将 WITH_GMOCK
环境变量设置为路径名。也可以使用 -DENABLE_DOWNLOADS=1
,以便 CMake从 GitHub 下载发行版。
cmake . -DWITH_BOOST=
生成Makefile:
cmake . -DBUILD_CONFIG=mysql_release \
-DCMAKE_BUILD_TYPE=RelWithDebInfo\
-DENABLED_LOCAL_INFILE=ON\
-DFORCE_INSOURCE_BUILD=1\
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci\
-DWITH_BOOST=./\
-DDOWNLOAD_BOOST=1\
-DMYSQL_TCP_PORT=3310\
-DCMAKE_INSTALL_PREFIX=/home/work/mysql_3310\
-DMYSQL_DATADIR=/home/work/mysql_3310/data\
-DSYSCONFDIR=/home/work/mysql_3310/conf\
-DWITH_INNODB_MEMCACHED=ON\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_ARCHIVE_STORAGE_ENGINE=1\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 > glc.log
多次运行时:
shell> make clean
shell> rm CMakeCache.txt
安装后初始化:(需要保证${mysql_data}目录为空目录)
# 一般用--initialize初始化:其中my.cnf文件中最重要的就是basedir和datadir参数
shell> ${mysql_home}/bin/mysqld --defaults-file=${mysql_etc}/my.cnf --initialize --user=${mysql_user}
# 不需要密码就能登陆的初始化:(一般不这样使用)
${mysql_home}/bin/mysqld --defaults-file=${mysql_etc}/my.cnf --initialize-insecure --user=${mysql_user}
new_password="123456"
${mysql_home}/bin/mysql -u root -P${mysql_port} --skip-password -Bse "ALTER USER 'root'@'localhost' IDENTIFIED BY '${new_password}';"
更改root@'localhost'密码:
cnf_file=${mysql_etc/my.cnf}
old_password=$(cat ${cnf_file}| grep "A temporary password is generated for" | tail -1 | sed -n 's/.*root@localhost: //p')
new_password="123456"
${mysql_home}/bin/mysql --connect-expired-password -uroot -P${mysql_port} -p${old_password} -Bse "ALTER USER 'root'@'localhost' IDENTIFIED BY '${new_password}';"
若开启skip_name_resolve则:
尝试连接到主机127.0.0.1 通常会解析为localhost帐户。
但是,如果服务器在skip_name_resolve启用的情况下运行,则此操作将失败 。如果您打算这样做,请确保存在可以接受连接的帐户。
例如,为了能够root使用 --host=127.0.0.1或 进行连接 --host=::1,请创建以下帐户: CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
##################