源码版MySQL编译、安装和启动

    技术2026-01-12  13

    点赞再看,养成习惯!觉得不过瘾的童鞋,欢迎关注公众号《机器学习算法工程师》,有非常多大神的干货文章可供学习噢…

    目录

    前言正文下载安装编译工具编译和安装启动客户端连接一点小帮助 结语参考文献童鞋们,码字不易,一键三连再走吧

    前言

    由于工作需要,小编这两个星期分别在CentOS 8和Ubuntu 18.04 LTS的平台上进行了MySQL 5.7源码版的编译、安装和启动过程,与所有大型软件的安装过程一样,十分让人头秃,一脚踩进深坑,从此头发哗啦啦地掉啊… 借着这次总结,把这个流程梳理一遍,让在座地各位童鞋少踩坑,多保留些头发-v-

    正文

    这里先简单谈谈编译源码版MySQL的意义所在,如下是MySQL官网的一句原话:

    Building MySQL from the source code enables you to customize build parameters, compiler optimizations, and installation location.

    自定义生成参数、编译器优化和安装位置这些好处能使我们对MySQL有个更清晰地认识,就小编的体验来说,在开发过程中如用python/java调用MySQL时能更加明白这些接口参数的意义。下面就开始讲解这一过程吧。

    下载

    下载最新的MySQL源码包其实挺容易的,但是下载指定的历史版本就不太容易了,小编这里用的是MySQL 5.7.19,而官网现在只有5.7.30了,而且下载速度贼慢!!!下载相关资料可以见参考文献。另外,小编也把自己用的MySQL_5.7.19+boost_1.59.0资源放到了上,可以在参考文献处找到链接。

    安装编译工具

    编译MySQL源码是需要编译工具,在linux平台如Unbuntu,要安装这些工具非常容易,这里直接给出命令:

    sudo apt install make cmake gcc g++ perl bison libaio-dev libncurses5 libncurses5-dev libnuma-dev

    Tips: Centos平台命令用的是yum,同时这些编译工具名字也会有所不同!

    编译和安装

    这一步首先要有个Boost C++ libraries,版本需要跟MySQL搭配好,本文中的MySQL 5.7需要的是Boost 1.59,这里小编提供的资源,是打包好Boost的,是不是很友好^ - ^。接下来步骤如下:

    解压源文件 tar -zxvf src_file -C dest_dir 编译 进入解压缩后的源码目录下,利用CMake工具编译: cmake . \ -DWITH_BOOST=/data/yifan/mysql_test/mysql5-src/mysql-5.7.19/boost/boost_1_59_0 \ -DCMAKE_INSTALL_PREFIX=/data/yifan/mysql_test/mysql5-compile \ -DMYSQL_DATADIR=/data/yifan/mysql_test/mysql5-compile/data \ -DMYSQLX_TCP_PORT=6789 \ -DMYSQL_UNIX_ADDR=/data/yifan/mysql_test/mysql.sock \ -DMYSQL_TCP_PORT=5678 \ -DMYSQLX_UNIX_ADDR=/data/yifan/mysql_test/mysqlx.sock \ -DDEFAULT_CHARSET=utf8 \ -DWITHOUT_CSV_STORAGE_ENGINE=1 \ -DWITHOUT_BLACKHOLD_STORAGE_ENGINE=1 \ -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \ -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \ -DWITHOUT_MRG_MYISAM_STORAGE_ENGINE=1 \ -DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1 \ -DFORCE_INSOURCE_BUILD=1 \ -DCMAKE_CXX_COMPILER=/usr/bin/g++ \ -DCMAKE_C_COMPILER=/usr/bin/gcc

    这些参数都非常重要,小编建议尝试自定义的参数是从DWITH_BOOST到DMYSQLX_UNIX_ADDR。很多教程都是按照官网的来,比如MySQL服务端的监听端口设置为3306,安装目录设置/usr/local/mysql,数据目录设置为/usr/local/mysql/data等等,这挺好的,但是如果平台已经有安装好的数据库,你现在要来练手,那就不能这样做了,还是需要自定义位置,弄清楚这些参数的意义才行。小编这里给出了demo,大家可以参考。 Tips: 端口设置虽然不需要按照默认的3306来,但是也是需要事先判断要用的端口有没有被其他程序占用,命令如下:

    # lsof -i:port lsof -i:5678 安装 还是源码的这个目录,执行下面命令来安装 make install

    Tips: 童鞋们最好先把/data/yifan目录的权限修改为自己这个用户yifan,不然会出现权限问题。

    启动

    MySQL服务端启动时是mysqld,在mysql安装目录下的bin目录中,客户端命令mysql也在其中。先进入该目录下,然后启动命令如下:

    # 初始化 mysqld [--defaults-file=/data/yifan/mysql_test/mysql.cnf] --initialize-insecure --user yifan # 启动 mysqld [--defaults-file=/data/yifan/mysql_test/mysql.cnf] [&]

    解释一波~~命令中[]是可选参数,如果前面的编译安装环节出了错,这里可以自己生成一个mysql.cnf配置文件,让mysqld启动时采用它而不是默认配置启动;initialize-insecure初始化后root用户没有密码;user就用之前安装目录所属的用户即可。小编特别提示一下,了解一下mysql.cnf是非常有必要的,而且启动过程很容易出问题,mysql.cnf还会告诉我们error.log在哪里,这样我们就知道出现了哪些errors;& 由于服务器启动就不再关闭了,所以加个&,让它进入后台运行。这里给个mysql.cnf模板:

    [mysql] port=5678 user=yifan default-character-set=utf8 no-auto-rehash [client] user=yifan port=5678 socket=/data/yifan/mysql_test/mysql5-data/my5678/run/mysql.sock [mysqld] basedir=/data/yifan/mysql_test datadir=/data/yifan/mysql_test/mysql5-data/my5678/data socket=/data/yifan/mysql_test/mysql5-data/my5678/run/mysql.sock tmpdir=/data/yifan/mysql_test/mysql5-data/my5678/tmp lc_messages_dir=/data/yifan/mysql_test/mysql5_compile/share lc_messages = en_US slow_query_log_file=/data/yifan/mysql_test/mysql5-data/my5678/log/slow.log general_log_file=/data/yifan/mysql_test/mysql5-data/my5678/log/general.log log_error=/data/yifan/mysql_test/mysql5-data/my5678/tmp/error.log #innodb innodb_data_home_dir=/data/yifan/mysql_test/mysql5-data/my5678/data innodb_log_group_home_dir=/data/yifan/mysql_test/mysql5-data/my5678/data innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend innodb_buffer_pool_instances=8 innodb_log_files_in_group=4 innodb_log_file_size=1G innodb_log_buffer_size=200M innodb_flush_log_at_trx_commit=0 innodb_max_dirty_pages_pct=60 innodb_io_capacity_max=100000 innodb_io_capacity=20000 innodb_thread_concurrency=64 innodb_read_io_threads=8 innodb_write_io_threads=8 innodb_open_files=615350 #innodb_file_format=Barracuda innodb_file_per_table=1 innodb_flush_method=O_DIRECT innodb_adaptive_flushing=1 transaction-isolation=READ-COMMITTED innodb_buffer_pool_size=32G #binlog log-bin=/data/yifan/mysql_test/mysql5-data/my5678/log/mysql-bin server_id=406590050 max_binlog_cache_size=2G max_binlog_size=500M binlog-format=ROW sync_binlog=0 #server default-storage-engine=INNODB character-set-server=utf8 lower_case_table_names=1 skip-external-locking open_files_limit=615350 safe-user-create local-infile=1 sql_mode='NO_ENGINE_SUBSTITUTION' performance_schema=0 default_authentication_plugin=mysql_native_password port=5678 skip-name-resolve skip-ssl max_connections=60000 max_user_connections=50000 max_connect_errors=65536 max_allowed_packet=1G innodb_use_native_aio=1 # kv loose_innodb_api_trx_level=1 loose_daemon_memcached_values_delimiter=':;:' #loose_daemon_memcached_option="-t 32 -c 8000 -p 5678" #double write innodb_doublewrite=1

    Tips: 这一步启动是比较容易出各种问题的,童鞋们一定要找到error.log文件,查看启动情况。若一切顺利,初始化的时候应该会生成无密码的root用户,正式启动的时候会出现[Note] mysqld: ready for connections.以及sock生成位置等信息。

    客户端连接

    在MySQL服务端启动后,我们就可以用客户端去连接并操纵数据库了,在Linux平台下有两种连接方式:基于socket和基于TCP/IP。客户端连接命令如下:

    # 基于socket # 第一种,mysql.sock正常 mysql -uroot -p # 第二种,mysql.sock找不到,那就需要去拷贝一份正常的sock mysql --socket=/data/yifan/mysql_test/mysql.sock -uroot -p # 基于TCP/IP # 第三种,通过网络连接 mysql -h IP -uroot -p -P5678

    Tips: 通过网络连接是常用的方式,但是我们需要提前让数据库开通IP连接的权限,步骤应该是先去mysql数据库中的user表查看用户开通访问的IP,如果没有就要自己增添权限,命令如下:

    # 查看用户开放的IP USE mysql; SELECT user,authentication_string,host FROM USER; # 赋予所有主机连接该数据库root用户的权限并刷新 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; flush privileges;

    一点小帮助

    很多时候我们会频繁使用mysql客户端命令,而前面自定义安装的方式,每次都需要进入安装目录下找到mysql命令,这很麻烦,所以我们可以创建一个软连接(类似于windows的快捷方式),放在系统目录下,所有用户都能直接访问到。命令如下:

    ln -s /data/yifan/mysql_test/mysql5-compile/bin/mysql /usr/bin/mysql_yf

    结语

    MySQL以前是非常流行的开源的关系型数据库,很多企业都在使用,而且研发岗面试的时候也基本上都会被问上几道题。本文提供的知识点算是给个好开头,毕竟大型软件的部署安装都是令人头秃的事情,因此打消学习积极性就不好了-v-。

    参考文献

    官网:https://dev.mysql.com/doc/refman/5.7/en/source-installation.html下载:https://developer.aliyun.com/article/443112资源:https://download.csdn.net/download/gongsai20141004277/12579873https://www.jianshu.com/p/117dab1b658d

    童鞋们,码字不易,一键三连再走吧

    Processed: 0.012, SQL: 9