linux通过源码编译安装mysql
OS:CentOS 7
MySQL version:5.7.29
一、下载依赖及源码包
yum install ncurses-devel gcc gcc-c++ openssl-devel -y
# 下载所需用到的工具
yum install wget cmake bzip2 -y
# 下载源码包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-5.7.29-1.el7.src.rpm
或者到https://downloads.mysql.com/archives/community/下载好相应的源码包,导入到Linux上。
二、解压并编译安装源码包
-
解压
rpm -ivh mysql-community-5.7.29-1.el7.src.rpm
解压后如下图所示。很明显在家目录下多了一个rpmbuild目录。
进入./rpmbuild/SOURCES目录,真正的源码包就存放在这个目录下。这个目录下有如下文件。
mysql-5.7.29.tar.gz就是源码所在的压缩包。还有一个boost_1_59_0.tar.bz2包,这是Boost的包。
Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。 ——摘自百度百科
-
将解压后的boost包目录移动到解压后的mysql包目录下,当然也可以不移动,在之后进行编译前的配置的时候使用绝对路径
cd ./rpmbuild/SOURCES tar xf mysql-5.7.29.tar.gz tar xf boost_1.59_0.tar.gz2 mv boost_1_59_0 mysql-5.7.29/
-
进行编译前的配置
# 创建mysql用户和所需的目录 useradd -r -s /sbin/nologin mysql mkdir -p /data/mysql/{data,log} chown -R mysql.mysql /data/mysql # 配置 cd ./mysql-5.7.29 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost_1_59_0 # 编译 make -j 2 && make install
- cmake 是一个编译器,就是将c语言编写的代码翻译成机器可以执行的二进制的程序。
- -DCMAKE_INSTALL_PREFIX 是编译安装MySQL的时候的固定语法参数,是给cmake传参的,指定MySQL安装的路径/usr/local/mysql,同时生成一个Makefile文件。具体的路径可以自己定义。
- -DMYSQL_DATADIR=/data/mysql 指定MySQL的存放数据的目录,具体的路径可以自己定义。
- -DSYSCONFDIR=/etc 指定MySQL的配置文件存放的目录。
- -DMYSQL_USER=mysql 指定启动mysql的用户,用户名可以自己定义。
- -DDEFAULT_CHARSET=utf8 指定MySQL里的默认的字符集,推荐指定默认的字符集为utf8。
- -DDEFAULT_COLLATION=utf8_general_ci COLLATION 排序规则。utf8_general_ci即utf8里的排序规则,不区分大小写。
- -DWITH_BOOST=boost_1_59_0 指定boost源码的位置。因为我之前将boost那个包解压后放到mysql-5.7.29目录下,所以在这里使用相对路径。
三、修改配置文件并初始化
-
修改配置文件
我这个配置文件比较简单,仅供参考,读者请根据自己的需求来配置。
配置文件各项解释:https://www.jb51.net/article/58538.htm
cat > /etc/my.cnf << EOF [client] default-character-set = utf8mb4 port = 3306 socket = /data/mysql/mysql.sock [mysqld] server_id = 1 character-set-server = utf8 user = mysql port = 3306 socket = /data/mysql/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql/data log-error = /data/mysql/log/mysql_error.log log-bin = /data/mysql/log/mysql-bin binlog_format = ROW pid-file = /data/mysql/mysql.pid open_files_limit = 8192 innodb_buffer_pool_size = 512M [mysql] auto-rehash prompt = '\u@\h [\d]> ' EOF
-
初始化
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/
四、启动MySQL
-
修改环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile
-
启动MySQL
\cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql /etc/init.d/mysql start # 设置开机启动 chkconfig --add mysql
看下3306端口有没有起来
-
获取默认密码登录
cat /data/mysql/log/mysql_error.log | grep "temporary password"
-
修改密码
root@localhost [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword2233$';
至此MySQL编译安装完成!