在国产麒麟系统KylinOS Server V10 SP2上使用编译方式安装MySQL 8.0.26
一: 操作系统环境检查
1.1 首先确认操作系统版本是KylinOS Server V10 SP2
麒麟操作系统Kylinos Server V10 SP2使用的安装介质是
Kylin-Server-10-SP2-x86-Release-Build09-20210524.iso,执行以下命令查看版本:
1 | cat /etc/kylin-release |
1 | cat /proc/version |
1.2 检查系统是否自带MySQL或MariaDB
通过以下命令检查是否安装:
1 | rpm -qa | grep mariadb |
如果系统已经安装了其它版本的MySQL或者MariaDB则要将其删除,执行以下命令删除:
1 | rpm -e {mariadb-server,mariadb,mariadb-errmessage,mariadb-common} |
1.3 安装编译代码所必须的依赖包
mysql 8.0源码编译依赖如下包,执行以下命令安装:
1 2 3 4 5 6 7 8 | yum install -y cmake make yum install -y git gcc gcc-c++ yum install -y perl-Data-Dumper bzip2 yum install -y ncurses ncurses-devel ncurses-base ncurses-libs yum install -y openssl openssl-devel openssl-libs yum install -y bzip2 bzip2-devel yum install -y libtirpc libtirpc-devel yum install -y readline readline-devel |
查看cmake、make、gcc、gcc-c++版本以确认安装成功:
1 2 3 4 | cmake --version make --version gcc --version gcc-c++ --version |
输出如下图:
1.4 安装编rpcgen
mysql 8.0的源码编译需要用到rpcgen包,这是用于自动生成RPC服务器程序代码的工具,它以一个规格说明文件(*.x)作为输入,对外输出一个C语言的源程序。
因为这个包没有包含在麒麟系统的安装镜像中,需要下载源码编译安装。
首先,下载rpc的源码包,下载链接如下:
然后,编译安装源码包
1 2 3 4 5 | tar xzvf rpcsvc-proto-1.4.3.tar.gz cd rpcsvc-proto-1.4.3 autogen.sh ./configure make & make install |
最后,查看rpcgen版本确认安装成功
1 | rpcgen --version |
输出如下图:
二:准备MySQL源码包
此文档安装社区版MySQL 8.0.26,此版本可与Kylinos V10 SP2兼容。
2.1 下载MySQL源码包
打开MySQL官网下载页面,选择正确的筛选条件
- Product Version 选择MySQL 8.0.26,
- Operating System 选择Source Code,
- OS Version 选择All Operating Systems(Generic)(Architecture Independent),
下方源码包列表会出现两个选择,第一个不带boost的源码,第二个带boost的源码,这里我们直接选择第二个mysql-boost-8.0.26.tar.gz,省去单独安装boost的繁琐操作。
2.2 上传MySQL源码包
将MySQL 8.0.26的源码包上传到/root/Documents目录并解压,之后在解压的源码包目录中创建编译目录light,因为不允许在源码目录直接编译。
1 2 3 4 5 | cd /root/Documents tar xzvf mysql-boost-8.0.26.tar.gz cd mysql-8.0.26 mkdir light cd light |
三:编译安装MySQL
3.1 cmake
我将几乎能用到的全部选项都开启,供参考。实际可以根据自己需要修改,比如关闭Innodb引擎之外的其它引擎、修改安装目录、是否创建SYSTEMD服务文件等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.26 \ -DWITH_SYSTEMD=1 \ -DENABLED_LOCAL_INFILE=ON \ -DWITH_INNODB_MEMCACHED=ON \ -DWITH_SSL=system \ -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 \ -DCOMPILATION_COMMENT="zsd edition" \ -DDOWNLOAD_BOOST=0 \ -DWITH_BOOST=/root/Documents/mysql-8.0.26/boost \ -DMYSQL_UNIX_ADDR=/data/mysql/data/mysqld.sock \ -DSYSCONFDIR=/data/mysql/data \ -DMYSQL_DATADIR=/data/mysql \ -DFORCE_INSOURCE_BUILD=1 \ -DCMAKE_CXX_COMPILER=/usr/bin/g++ \ -DCMAKE_C_COMPILER=/usr/bin/gcc |
3.2 make
mysql 8源码编译对内存需求较大,最好准备32G以上内存;
为了提高编译速度,可以根据CPU核数开启并行编译,这里我使用12个并行编译。
1 | make -j 12 |
3.3 make install
make编译完成后就可以安装了,安装目录对应cmake中的-DCMAKE_INSTALL_PREFIX
1 | make install |
四:配置启动MySQL
4.1 创建mysql用户
1 2 | groupadd mysql useradd -M -g mysql -s /sbin/nologin mysql |
4.2 创建数据目录
1 2 | mkdir /data/mysql/{data,log,redo,undo,arch} -p chown mysql.mysql /data -R |
4.3 创建mysql环境变量
创建mysql目录软连接
1 | ln -s /usr/local/mysql-8.0.26 /usr/local/mysql |
创建mysql环境变量配置文件
1 2 3 4 | echo 'MYSQL_HOME=/usr/local/mysql' >> /etc/profile.d/mysql.sh echo 'PATH=$PATH:$MYSQL_HOME/bin' >> /etc/profile.d/mysql.sh echo 'export PATH' >> /etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh |
4.4 创建my.cnf配置文件
编辑/etc/my.cnf文件
1 | vim /etc/my.cnf |
输入以下内容到/etc/my.cnf中,此配置将data、redolog、undo、binlog分别置于独立目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | [mysql] socket=/data/mysql/data/mysqld.sock [mysqld] ###base config### server-id=210 basedir=/usr/local/mysql datadir=/data/mysql/data socket=/data/mysql/data/mysqld.sock pid-file=/data/mysql/data/mysqld.pid log-error=/data/mysql/log/mysqld.log ###query config### join_buffer_size = 128M sort_buffer_size = 16M read_buffer_size = 16M read_rnd_buffer_size = 8M ###open table config### table_open_cache=2000 table_open_cache_instances=16 ###connection config### max_connections=2000 thread_cache_size=200 ###binlog config### log_bin=/data/mysql/log/binlog log_bin_index=/data/mysql/log/binlog.index binlog_format=ROW max_binlog_size=1G binlog_cache_size=16M binlog_expire_logs_seconds=604800 enforce_gtid_consistency=ON gtid_mode=ON ###general log config### general_log=OFF general_log_file=/data/mysql/log/mysqld.gnl ###slow query config### log_output=FILE long_query_time=1 slow_query_log=ON slow_query_log_file=/data/mysql/log/mysqld.slow ###innodb redo log config### innodb_log_file_size=1G innodb_log_files_in_group=3 innodb_log_buffer_size=16M innodb_log_group_home_dir=/data/mysql/redo innodb_redo_log_archive_dirs=/data/mysql/arch ###innodb undo log config### #innodb_max_undo_log_size=1G #innodb_undo_tablespaces=2 innodb_undo_directory=/data/mysql/undo ###innodb config### #innodb_data_file_path=ibdata1:12M:autoextend #innodb_temp_data_file_path=ibtmp1:12M:autoextend #innodb_temp_tablespaces_dir=./#innodb_temp/ #innodb_autoextend_increment=64 innodb_buffer_pool_size=8G innodb_open_files=10000 open_files_limit=10000 |
4.5 初始化mysql
1 | mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql |
4.6 配置systemd mysqld服务
1 2 3 | cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ cp /usr/local/mysql/usr/lib/systemd/system/mysqld@.service /usr/lib/systemd/system/ systemctl enable mysqld |
4.7 启动MySQL
安装完成后MySQL服务默认并未启动,可以通过以下命令查看到状态:
1 | systemctl status mysqld |