MySQL是最流行的关系型数据库管理系统之一。本文就来带大家自定义版本编译安装MySQL。
- 使用系统:CentOS 7.9.2009
MySQL安装
此为MySQL的自定义版本的源码编译安装教程(测试安装的数据版本为MySQL-5.6.50),若需要其他的安装版本可前往官方下载:https://downloads.mysql.com/archives/community/,同时若MySQL源码中用到了C++的Boost库,则要求必须安装boost1.59.0或以上版本,可前往官方下载安装:https://sourceforge.net/projects/boost/files/boost/
本文MySQL的安装目录为:/usr/local/mysql/etc
1、安装所需依赖库
yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmake openssl openssl-devel autoconf wget git
2、下载数据库二进制文件
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.50.tar.gz
boost为可选下载,若您的数据库包含了boost文件,可不需下载,若无则下载,命令如下:
wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
3、解压相关文件
解压数据库
tar -zxvf mysql-5.6.50.tar.gz
解压 boost并拷贝 boost 到/usr/local/boost
目录
tar -zxvf boost_1_59_0.tar.gz
cp -r boost_1_59_0 /usr/local/boost
4、添加MySQL用户及用户组
groupadd mysql
# 此命令仅创建用户并将用户纳入相关组,不在/home目录创建用户家目录,若要创建,请加上-r参数
useradd -g mysql -s /sbin/nologin -M mysql
5、新建MySQL安装所需要目录和创建数据存储目录
mkdir -p /usr/local/mysql /usr/local/mysql/{data,logs,pids}
mkdir -p /var/lib/mysql
6、编译安装MySQL
cd mysql-5.6.50
# 预编译参数
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/usr/local/mysql/etc \
-DMYSQL_DATADIR=/var/lib/mysql \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DENABLE_DOWNLOADS=1
#注:若安装需要boost库,可在后面追加一个 -DWITH_BOOST=/usr/local/boost,
若您的数据库含有boost库,则将其替换成 -DWITH_BOOST=./boost即可
make -j `grep processor /proc/cpuinfo | wc -l`
make install
# 注:-j参数表示根据CPU核数指定编译时的线程数,可以加快编译速度。否则默认为1个线程编译
如果中途编译失败了,需要删除cmake
生成的预编译配置参数的缓存文件和make编译后生成的文件,再重新编译。
cd mysql-5.6.50
rm -f CMakeCache.txt
make clean
7、设置权限
cd /usr/local/mysql
chown -R mysql:mysql .
chown -R mysql:mysql /var/lib/mysql
8、将MySQL添加到环境变量
vim /etc/profile
# 添加如下内容
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
source /etc/profile
9、配置参数及参数优化
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf
#修改为如下内容:
[mysqld]
port=3306
bind-address=0.0.0.0
datadir=/var/lib/mysql
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
character_set_server = utf8mb4
collation-server = utf8mb4_general_ci
default_storage_engine = InnoDB
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
performance_schema_max_table_instances = 400
table_definition_cache = 400
key_buffer_size = 32M
tmp_table_size = 32M
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
innodb_data_file_path=ibdata1:12M;ibdata2:10M:autoextend
innodb_buffer_pool_size=256M
innodb_log_buffer_size=32M
innodb_log_file_size=128M
#innodb_flush_method=O_DIRECT
#innodb_force_recovery=1
skip-external-locking
#skip-name-resolve
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid
symbolic-links=0
[client]
socket=/tmp/mysql.sock
port=3306
[mysql]
port=3306
socket=/tmp/mysql.sock
[mysqldump]
quick
max_allowed_packet = 500M
10、初始化系统数据库
cd /usr/local/mysql
# 注意:MySQL 5.7.6之前的版本执行这个脚本初始化系统数据库(本文使用此方式初始化)
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
# 5.7.6之后版本初始系统数据库脚本
./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
# 注意:如果使用–initialize参数初始化系统数据库之后,会在~/.mysql_secret文件中生成root用户的一个临时密码,同时也在初始化日志中打印出来了
# 不管哪个初始化时无ERROR报错方为初始化成功!!!
MySQL设置自启动
1、设置开机自启
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 添加到系统服务
chkconfig --add mysqld
# 开机启动
chkconfig mysqld on
启动服务相关命令
# 启动mysql服务
service mysqld start
# 停止mysql服务
service mysqld stop
# 重新启动mysql服务
service mysqld restart
启动成功后初始化数据库操作:/usr/local/mysql/bin/mysql_secure_installation
接下来的操作可看博文:https://www.isisy.com/886.html中的MySQL相关部分进行数据库的初始化,权限及用户的操作可看博文:https://www.isisy.com/917.html
2、后续问题及解决
- 启动数据库时报错
mysqld_safe error: log-error set to '/var/log/mysqld.log', however file don't exists. Create writable for user 'mysql'.
解决:日志文件的缺失导致的,创建一个该文件并即可。命令如下:
touch /var/log/mysqld.log
MySQL5.6添加sys库教程
MySQL5.7引入的sys库可以看作是由information_schema引出的一套视图,更便于获取一些性能数据。
1、从github上克隆项目到本地
cd ~
yum install -y git
git clone https://github.com/mysql/mysql-sys.git
2、导入sys库
cd mysql-sys
mysql -u root -p -S /tmp/mysql.sock < ./sys_56.sql