这篇文章是关于MySQL编译安装的,重点掌握的是编译的过程,以及体会排错的痛苦。出错在所难免,最重要的是要有一颗不放弃的心。
本文收录于《数据库入门与精通》专栏,
本专栏写作的过程中,联合了csdn几位DBA大佬,目前正在整理更新目录,力争让大家学到一些真东西,将所学的理论落地,帮助你更快的提升自己。
学技术最难的地方,其实是找到最优资料的过程,我体验下来觉得找到合适的资料非常难, 即使花钱可能都找不到一份真的能让我学会的资料。这次联合几位DBA博主大佬,一起打造易学,易懂,落地的MySQL专栏
编译MySQL不但时间长,而且容易出错,建议前期跟我的环境一致,确保完整实现全过程后,再考虑更换版本。
操作系统 | 内存 | cpu | ip |
---|---|---|---|
CentOS7.6 | 4G | 2核心 | 192.168.1.41 |
软件包环境:
[root@mufeng42 ~]# mkdir -p /usr/local/src/mysql
[root@mufeng42 ~]# yum -y install gcc gcc-c++ make glibc automake autoconf libtool libssl-dev openssl openssl-devel
[root@mufeng42 ~]# cd /usr/local/src/mysql/
[root@mufeng42 mysql]# yum install -y wget ca-certificates
注意:安装 ca-certificates 解决wget下载出的问题(颁发的证书已经过期。要以不安全的方式连接至 downloads.sourceforge.net,使用“–no-check-certificate”。)
以下三个软件是需要自行下载和上传的:
拓展及思考:
截止2023年4月,最新的版本是1.80.0:
下载地址: https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz
2. cmake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性。
当你用不同的语言或者编译器开发一个项目,code完之后要生成最终的输出(dll 或执行文件),这时候就尴尬了,你要手动去MingGW或者GCC下配置成千上万的.cpp .h .o .c…路劲和地址吗?这时候神器就出现了-----CMake!
以上软件包传到下面的路径中即可:
[root@mufeng42 mysql]# pwd
/usr/local/src/mysql
[root@mufeng42 mysql]# ls
boost_1_59_0.tar.gz cmake-3.22.1.tar.gz mysql-5.7.37.tar.gz
[root@mufeng42 mysql]#
[root@mufeng42 mysql]# tar xf cmake-3.22.1.tar.gz
[root@mufeng42 mysql]# cd cmake-3.22.1
[root@mufeng42 cmake-3.22.1]# ./bootstrap && gmake && gmake install
cmake -version
[root@mufeng42 mysql]# tar xf boost_1_59_0.tar.gz -C /usr/local/
[root@mufeng42 mysql]# cd !$
cd /usr/local/
[root@mufeng42 local]# mv boost_1_59_0/ boost
[root@mufeng42 local]# cd boost/
[root@mufeng42 boost]# ls -l
总用量 108
drwxr-xr-x. 105 501 games 8192 8月 12 2015 boost
-rw-r--r--. 1 501 games 850 8月 11 2015 boost-build.jam
-rw-r--r--. 1 501 games 21920 8月 11 2015 boostcpp.jam
-rw-r--r--. 1 501 games 989 8月 11 2015 boost.css
-rw-r--r--. 1 501 games 6308 8月 11 2015 boost.png
-rw-r--r--. 1 501 games 2477 8月 11 2015 bootstrap.bat
-rwxr-xr-x. 1 501 games 10631 8月 11 2015 bootstrap.sh
drwx------. 7 501 games 84 8月 12 2015 doc
-rw-r--r--. 1 501 games 769 8月 11 2015 index.htm
-rw-r--r--. 1 501 games 5476 8月 11 2015 index.html
-rw-r--r--. 1 501 games 291 8月 11 2015 INSTALL
-rw-r--r--. 1 501 games 10779 8月 11 2015 Jamroot
drwx------. 116 501 games 4096 8月 12 2015 libs
-rw-r--r--. 1 501 games 1338 8月 11 2015 LICENSE_1_0.txt
drwxr-xr-x. 4 501 games 159 8月 11 2015 more
-rw-r--r--. 1 501 games 2608 8月 11 2015 rst.css
drwxr-xr-x. 2 501 games 141 8月 11 2015 status
drwxr-xr-x. 10 501 games 190 8月 11 2015 tools
[root@mufeng42 boost]# yum install -y ncurses-devel gcc gcc-c++ ncurses bison make
root@mufeng42 boost]# mkdir -p /database/mysql/{data,tmp,binlog,logs}
[root@mufeng42 boost]# userdel -r mysql
userdel:用户“mysql”不存在
[root@mufeng42 boost]# groupadd mysql
[root@mufeng42 boost]# useradd mysql -s /sbin/nologin -M -g mysql
[root@mufeng42 boost]# id mysql
uid=1001(mysql) gid=1001(mysql) 组=1001(mysql)
[root@mufeng42 boost]# cd /usr/local/src/mysql/
[root@mufeng42 mysql]# tar xf mysql-5.7.37.tar.gz
cd mysql-5.7.37
cmake . -DCMAKE_INSTALL_PREFIX=/database/mysql \
-DMYSQL_DATADIR=/database/mysql/data \
-DMYSQL_UNIX_ADDR=/database/mysql/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
[root@mufeng42 mysql-5.7.37]# make install
[root@mufeng42 mysql-5.7.37]# echo 'export PATH=/database/mysql/bin:$PATH' >> /etc/profile
[root@mufeng42 mysql-5.7.37]# tail -1 /etc/profile
export PATH=/database/mysql/bin:$PATH
[root@mufeng42 mysql-5.7.37]# source /etc/profile
[root@mufeng42 mysql-5.7.37]# echo $PATH
/database/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@mufeng42 mysql-5.7.37]# chown -R mysql:mysql /database/mysql/
chown mysql:mysql /etc/my.cnf
[root@mufeng42 mysql-5.7.37]# cp /etc/my.cnf /etc/my.cnf.bak
[root@mufeng42 mysql-5.7.37]# vi /etc/my.cnf
# 写入如下内容(命令版):
[client]
port = 3306
socket = /database/mysql/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
server_id = 1
user = mysql
basedir = /database/mysql
datadir = /database/mysql/data
tmpdir = /database/mysql/tmp
socket = /database/mysql/mysql.sock
pid_file = /database/mysql/mysql.pid
character_set_server = utf8
max_connections = 100
max_connect_errors = 10
log_error = /database/mysql/logs/mysql_5_7_37.err
log_bin = /database/mysql/binlog/mysql-bin
注释:
# 写入如下内容(解释版):
[client]
port = 3306
# 连接端口号
socket = /database/mysql/mysql.sock
# 用于本地连接的socket套接字
default-character-set = utf8
# 编码
[mysqld]
port = 3306
# 服务端口号
server_id = 1
# MySQL服务的唯一编号,每个mysql服务ID需唯一
user = mysql
# 启动用户
basedir = /database/mysql
# mysql安装根目录
datadir = /database/mysql/data
# mysql数据文件所在位置
tmpdir = /database/mysql/tmp
# MySQL存放临时文件的目录
socket = /database/mysql/mysql.sock
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
pid_file = /database/mysql/mysql.pid
# pid文件所在目录
character_set_server = utf8
# 数据库默认字符集
max_connections = 100
# 最大连接数
max_connect_errors = 10
# 最大错误连接数
log_error = /database/mysql/logs/mysql_5_7_37.err
# mysql生成错误日志存放的路径
log_bin = /database/mysql/binlog/mysql-bin
# 开启二进制日志功能
## 切换到路径
[root@mufeng42 mysql]# pwd
/database/mysql
[root@mufeng42 mysql]# ls
## data目录不能提前建,如果有,先删除
bin binlog docs include lib LICENSE logs man mysql-test README README-test share support-files tmp
[root@mufeng42 mysql]# ./bin/mysqld --initialize-insecure --user=mysql --basedir=/database/mysql --datadir=/database/mysql/data
注释:
生成初始化密码参数(5.7版本才有),必须添加(--initialize-insecure)
设定初始化用户(--user=mysql)
设定mysql工作目录(--basedir=/database/mysql)
设定数据文件目录(--datadir=/database/mysql/data)
cd /database/mysql/
./bin/mysql_ssl_rsa_setup --initialize-insecure --user=mysql --basedir=/database/mysql --datadir=/database/mysql/data
[root@mufeng42 mysql]# cd /database/mysql/data/
[root@mufeng42 data]# chmod +r server-key.pem
[root@mufeng42 data]# ls -l server-key.pem
-rw-r--r--. 1 mysql mysql 1680 3月 21 19:19 server-key.pem
[root@mufeng42 data]#
root@mufeng42 data]# cd /database/mysql/
[root@mufeng42 mysql]# cp support-files/mysql.server /etc/init.d/mysql
[root@mufeng42 mysql]# ls -l /etc/init.d/mysql
-rwxr-xr-x. 1 root root 10570 3月 21 19:20 /etc/init.d/mysql
[root@mufeng42 mysql]#
[root@mufeng42 mysql]# systemctl daemon-reload
[root@mufeng42 mysql]# systemctl enable mysql
mysql.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysql on
[root@mufeng42 mysql]# /sbin/chkconfig mysql on
[root@mufeng42 mysql]#
/etc/init.d/mysql start # 开启
或者
/etc/init.d/mysql stop # 停止
/etc/init.d/mysql start
ps aux | grep mysqld
root@mufeng42 mysql]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 63520 mysql 22u IPv6 97573 0t0 TCP *:mysql (LISTEN)
[root@mufeng42 mysql]#
[root@mufeng42 mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37-log Source distribution
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
查看有哪些用户:
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
mysql> grant all privileges on *.* to root@'%' identified by 'Mufenggrow123!' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
flush privileges;
本文带你实战了MySQL编译的过程,建议一定要上机操作一下,体验过,在你以后面试或者毕设谈项目的时候,才能讲出亮点。
还没订阅本专栏的朋友,Come on ! 点击下面的订阅,一起开启学习之旅
MySQL从入门到精通专栏入口: https://blog.csdn.net/wisdom_futrue/category_12218628.html
另外还有云原生专栏,可以从首页进行查找订阅哦:
最后强调,必须动手实操,想实战就不要光看,到手的知识才属于你!来评估一下你的学习情况吧,投票投票投票~~~
遇到问题,一定要发评论区,我们一起探头哦 ,记得关注我哈