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

 ncurses

 

 

 

 

 安装前的布局:

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';

 

 

 

##################

posted @ 2021-09-09 14:58  igoodful  阅读(361)  评论(0编辑  收藏  举报