前言
mysql有多种安装方式,源码安装也是其中一种。通过这种方式,可以极大定制一些mysql的功能,包括:存储引擎的启用和禁用,某些功能的启用及禁用;某些变量的启用及禁用;通过源码安装可以用gdb进行调试分析mysql源码,进一步掌握mysql内部运行机制及原理。
联系方式
微信公众号

微信

培训课件
(收费20元已共享到百度云盘便于同学们获取)


目录
相关阅读
mysql 8.0.18源码安装介质
mysql 8.0.18源码安装2种类型
mysql 8.0.18源码安装前提条件
编译安装mysql 8.0.18源码
初始化mysql 8.0.18数据库
启动mysql 8.0.18数据库
配置mysql 8.0.18自动重启
登陆mysql 8.0.18
相关阅读
mysql 8.0.18源码安装介质
https://github.com/mysql/mysql-server/releases/tag/mysql-8.0.18或者https://dev.mysql.com/downloads/mysql/
mysql 8.0.18源码安装2种类型
本文采用标准源码安装,开发树源码安装和它整体流程差不多。后续会有专文。

mysql 8.0.18源码安装前提条件

上传mysql 8.0.18源码安装介质
[root@mysql8018 mysql8018_dir]# pwd/mysql8018_dir[root@mysql8018 mysql8018_dir]# ll mysql-8.0.18.tar.gz-rw-r--r--. 1 root root 197457483 12月 2 11:33 mysql-8.0.18.tar.gz
升级redhat 6.8 cmake 2.8到cmake 3.9
redhat 6.8升级默认cmake 2.8到cmake 3.9http://blog.itpub.net/9240380/viewspace-2666666/
升级redhat 6.8 boost 1.41到boost 1.70
https://www.boost.org/users/history/version_1_70_0.html
编译安装mysql 8.0.18源码
删除操作系统默认安装的mysql 5.1相关软件包
[root@mysql8018 ~]# rpm -qa|grep -i --color mysqlqt-mysql-4.6.2-28.el6_5.x86_64perl-DBD-MySQL-4.013-3.el6.x86_64mysql-devel-5.1.73-7.el6.x86_64mysql-libs-5.1.73-7.el6.x86_64mysql-server-5.1.73-7.el6.x86_64[root@mysql8018 ~]# rpm -qa|grep -i --color mysql*|xargs rpm -e --nodeps[root@mysql8018 ~]# rpm -qa|grep -i --color mysql[root@mysql8018 ~]#[root@mysql8018 ~]# userdel mysql
创建mysql组及用户
[root@mysql8018 ~]# groupadd mysql[root@mysql8018 ~]# useradd -r -g mysql -s bin/false mysql
解压mysql 8.0.18安装介质
[root@mysql8018 mysql8018_dir]# tar -zxvf mysql-8.0.18.tar.gz略[root@mysql8018 mysql8018_dir]# ll总用量 192836drwxr-xr-x. 32 7161 31415 4096 9月 20 16:58 mysql-8.0.18-rw-r--r--. 1 root root 197457483 12月 2 11:33 mysql-8.0.18.tar.gz
创建mysql 8.0.18 build目录
[root@mysql8018 mysql8018_dir]# cd mysql-8.0.18[root@mysql8018 mysql-8.0.18]# ll总用量 772drwxr-xr-x. 7 root root 4096 9月 20 16:58 clientdrwxr-xr-x. 4 root root 4096 9月 20 16:58 cmake略drwxr-xr-x. 2 root root 4096 9月 20 16:58 win[root@mysql8018 mysql-8.0.18]#[root@mysql8018 mysql-8.0.18]# mkdir compile_mysql_dir
执行cmake编译mysql 8.0.18 源码
显式指向boost 1.70,否则可能会报错
[root@mysql8018 ~]# export CC=/usr/bin/gcc[root@mysql8018 ~]# export CXX=/usr/bin/g++[root@mysql8018 compile_mysql_dir]# cmake .. -DDOWNLOAD_BOOST=1 -DWITH_DEBUG=1 -DWITH_UNIT_TESTS=off -DWITH_BOOST=/usr/share/boost-1.70.0
如未显式指定boost可能报错信息
CMake Error in extra/protobuf/protobuf-3.6.1/cmake/CMakeLists.txt:Target "libprotobuf-lite" requires the language dialect "CXX14" , but CMakedoes not know the compile flags to use to enable it.
执行make
[root@mysql8018 compile_mysql_dir]# make[ 26%] Linking CXX executable ../runtime_output_directory/uca9dump[ 26%] Built target uca9dump[ 26%] Generating uca900_zh_tbls.cc, uca900_ja_tbls.cc../runtime_output_directory/uca9dump: usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ../runtime_output_directory/uca9dump)make[2]: *** [strings/uca900_zh_tbls.cc] 错误 1make[1]: *** [strings/CMakeFiles/strings_objlib.dir/all] 错误 2make: *** [all] 错误 2[root@mysql8018 compile_mysql_dir]#查阅资料 https://blog.csdn.net/u012811841/article/details/77854581可见glibc 3.4[root@mysql8018 compile_mysql_dir]# strings usr/lib64/libstdc++.so.6|grep -i --color glibcGLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBC_2.2.5GLIBC_2.3GLIBC_2.4GLIBC_2.3.2GLIBCXX_FORCE_NEWGLIBCXX_DEBUG_MESSAGE_LENGTH[root@mysql8018 compile_mysql_dir]#可见cxxabi 1.3.3[root@mysql8018 compile_mysql_dir]# strings usr/lib64/libstdc++.so.6|grep -i --color CXXABI_1CXXABI_1.3CXXABI_1.3.1CXXABI_1.3.2CXXABI_1.3.3[root@mysql8018 compile_mysql_dir]#查阅当前操作系统的相关libstdc++文件[root@mysql8018 compile_mysql_dir]# find -name libstdc++*|grep -i --color libstdc++*/usr/local/gcc-5.3.0/lib64/libstdc++fs.la/usr/local/gcc-5.3.0/lib64/libstdc++.so.6/usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21-gdb.py/usr/local/gcc-5.3.0/lib64/libstdc++.la/usr/local/gcc-5.3.0/lib64/libstdc++fs.a/usr/local/gcc-5.3.0/lib64/libstdc++.a/usr/local/gcc-5.3.0/lib64/libstdc++.so/usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21/usr/local/gcc-5.3.0/share/locale/fr/LC_MESSAGES/libstdc++.mo/usr/local/gcc-5.3.0/share/locale/de/LC_MESSAGES/libstdc++.mo/usr/lib64/libstdc++.so.6.0.13/usr/lib64/libstdc++.so.6/usr/lib64/libstdc++.so.5/usr/lib64/libstdc++.so.5.0.7可见gcc新版本的文件是包括上述未找到的 CXXABI_1.3.9 文件[root@mysql8018 compile_mysql_dir]# strings usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21|grep CXXABI_1CXXABI_1.3CXXABI_1.3.1CXXABI_1.3.2CXXABI_1.3.3CXXABI_1.3.4CXXABI_1.3.5CXXABI_1.3.6CXXABI_1.3.7CXXABI_1.3.8CXXABI_1.3.9[root@mysql8018 compile_mysql_dir]#上述问题解决[root@mysql8018 compile_mysql_dir]# ll usr/lib64/libstdc++.so.6*lrwxrwxrwx. 1 root root 19 12月 2 10:45 usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13-rwxr-xr-x. 1 root root 987096 12月 16 2015 usr/lib64/libstdc++.so.6.0.13[root@mysql8018 compile_mysql_dir]# rm -rf usr/lib64/libstdc++.so.6[root@mysql8018 compile_mysql_dir]# ln -s usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21 usr/lib64/libstdc++.so.6[root@mysql8018 compile_mysql_dir]#问题解决[root@mysql8018 compile_mysql_dir]# strings usr/lib64/libstdc++.so.6|grep -i --color CXXABI_1CXXABI_1.3CXXABI_1.3.1CXXABI_1.3.2CXXABI_1.3.3CXXABI_1.3.4CXXABI_1.3.5CXXABI_1.3.6CXXABI_1.3.7CXXABI_1.3.8CXXABI_1.3.9[root@mysql8018 compile_mysql_dir]##重新执行make[root@mysql8018 compile_mysql_dir]# make略[100%] Built target mysqlrouter_keyringScanning dependencies of target mysqlrouter[100%] Building CXX object router/src/router/src/CMakeFiles/mysqlrouter.dir/main.cc.o[100%] Linking CXX executable ../../../../runtime_output_directory/mysqlrouter[100%] Built target mysqlrouter
执行make install
[root@mysql8018 compile_mysql_dir]# make install略-- Installing: usr/local/mysql/man/man1/mysqladmin.1-- Installing: usr/local/mysql/man/man1/mysqlbinlog.1-- Installing: usr/local/mysql/man/man1/mysqlcheck.1-- Installing: usr/local/mysql/man/man1/mysqld_multi.1-- Installing: usr/local/mysql/man/man1/mysqld_safe.1-- Installing: usr/local/mysql/man/man1/mysqldump.1-- Installing: usr/local/mysql/man/man1/mysqldumpslow.1-- Installing: usr/local/mysql/man/man1/mysqlimport.1-- Installing: usr/local/mysql/man/man1/mysqlman.1-- Installing: usr/local/mysql/man/man1/mysqlpump.1-- Installing: usr/local/mysql/man/man1/mysqlshow.1-- Installing: usr/local/mysql/man/man1/mysqlslap.1-- Installing: usr/local/mysql/man/man1/perror.1-- Installing: usr/local/mysql/man/man1/zlib_decompress.1-- Installing: usr/local/mysql/man/man8/mysqld.8-- Installing: usr/local/mysql/man/man1/mysqlrouter.1-- Installing: usr/local/mysql/man/man1/mysqlrouter_passwd.1-- Installing: usr/local/mysql/man/man1/mysqlrouter_plugin_info.1
验证mysql 8.0.18源码安装
[root@mysql8018 compile_mysql_dir]# ll /usr/local/mysql总用量 956drwxr-xr-x. 2 root root 4096 12月 3 13:18 bindrwxr-xr-x. 2 root root 4096 12月 3 13:18 docsdrwxr-xr-x. 3 root root 4096 12月 3 13:18 includedrwxr-xr-x. 6 root root 4096 12月 3 13:18 lib-rw-r--r--. 1 root root 408918 9月 20 16:30 LICENSE-rw-r--r--. 1 root root 102977 9月 20 16:30 LICENSE.router-rw-r--r--. 1 root root 408918 9月 20 16:30 LICENSE-testdrwxr-xr-x. 4 root root 4096 12月 3 13:18 mandrwxr-xr-x. 10 root root 4096 12月 3 13:18 mysql-test-rw-r--r--. 1 root root 687 9月 20 16:30 README-rw-r--r--. 1 root root 700 9月 20 16:30 README.router-rw-r--r--. 1 root root 687 9月 20 16:30 README-testdrwxrwxr-x. 2 root root 4096 12月 3 13:18 rundrwxr-xr-x. 28 root root 4096 12月 3 13:18 sharedrwxr-xr-x. 2 root root 4096 12月 3 13:18 support-filesdrwxr-xr-x. 3 root root 4096 12月 3 13:18 var
初始化mysql 8.0.18数据库
[root@mysql8018 compile_mysql_dir]# cd /usr/local/mysql[root@mysql8018 mysql]# mkdir mysql-files[root@mysql8018 mysql]# chown mysql:mysql mysql-files[root@mysql8018 mysql]# chmod 750 mysql-files[root@mysql8018 mysql]# ./bin/mysqld --initialize --user=mysql2019-12-03T05:24:16.705903Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.18-debug) initializing of server in progress as process 9662019-12-03T05:24:22.456021Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 4DVpef,erD.M[root@mysql8018 mysql]#初始化数据库存储在/usr/local/mysql/data[root@mysql8018 mysql]# ll /usr/local/mysql/data总用量 168016-rw-r-----. 1 mysql mysql 56 12月 3 13:24 auto.cnf-rw-r-----. 1 mysql mysql 155 12月 3 13:25 binlog.000001-rw-r-----. 1 mysql mysql 16 12月 3 13:25 binlog.index-rw-------. 1 mysql mysql 1676 12月 3 13:24 ca-key.pem-rw-r--r--. 1 mysql mysql 1112 12月 3 13:24 ca.pem-rw-r--r--. 1 mysql mysql 1112 12月 3 13:24 client-cert.pem-rw-------. 1 mysql mysql 1676 12月 3 13:24 client-key.pem-rw-r-----. 1 mysql mysql 5349 12月 3 13:24 ib_buffer_pool-rw-r-----. 1 mysql mysql 12582912 12月 3 13:25 ibdata1-rw-r-----. 1 mysql mysql 50331648 12月 3 13:25 ib_logfile0-rw-r-----. 1 mysql mysql 50331648 12月 3 13:24 ib_logfile1-rw-r-----. 1 mysql mysql 12582912 12月 3 13:25 ibtmp1drwxr-x---. 2 mysql mysql 4096 12月 3 13:25 #innodb_tempdrwxr-x---. 2 mysql mysql 4096 12月 3 13:24 mysql-rw-r-----. 1 mysql mysql 581 12月 3 13:25 mysql8018.err-rw-r-----. 1 mysql mysql 5 12月 3 13:25 mysql8018.pid-rw-r-----. 1 mysql mysql 25165824 12月 3 13:25 mysql.ibddrwxr-x---. 2 mysql mysql 4096 12月 3 13:24 performance_schema-rw-------. 1 mysql mysql 1676 12月 3 13:24 private_key.pem-rw-r--r--. 1 mysql mysql 452 12月 3 13:24 public_key.pem-rw-r--r--. 1 mysql mysql 1112 12月 3 13:24 server-cert.pem-rw-------. 1 mysql mysql 1676 12月 3 13:24 server-key.pemdrwxr-x---. 2 mysql mysql 4096 12月 3 13:24 sys-rw-r-----. 1 mysql mysql 10485760 12月 3 13:25 undo_001-rw-r-----. 1 mysql mysql 10485760 12月 3 13:25 undo_002[root@mysql8018 mysql]# ./bin/mysql_ssl_rsa_setup
启动mysql 8.0.18数据库
[root@mysql8018 mysql]# ./bin/mysqld_safe --user=mysql &[1] 1027[root@mysql8018 mysql]# Logging to '/usr/local/mysql/data/mysql8018.err'.2019-12-03T05:25:24.750760Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data[root@mysql8018 mysql]#
配置mysql 8.0.18自动重启
[root@mysql8018 mysql]# pwd/usr/local/mysql[root@mysql8018 mysql]# cp support-files/mysqlmysqld_multi.server mysql-log-rotate mysql.server[root@mysql8018 mysql]# cp support-files/mysql.server /etc/init.d/mysql.server
登陆mysql 8.0.18
[root@mysql8018 mysql]# /usr/local/mysql/bin/mysql -uroot -p4DVpef,erD.Mmysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 8Server version: 8.0.18-debugCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>mysql> show databases;ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.mysql> alter user root@'localhost' identified by 'system';Query OK, 0 rows affected (0.03 sec)[root@mysql8018 mysql]# /usr/local/mysql/bin/mysql -uroot -psystemmysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 9Server version: 8.0.18-debug Source distributionCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows in set (0.02 sec)




