Linux源码编译安装MySql

5/16/2023 MySqlLinux

Linux安装MySQL的方式有多种,为了加深理解和自定义安装目录,此文将演示使用源码编译的方式在Linux服务器安装MySql数据库,由于我的服务器已经安装了MySql,版本是5.7.38。所以为了演示,我要先将原先的数据库备份,再卸载再重装...

# 备份和卸载数据库

编写语句备份数据库,-B 备份整个数据库包含,创建语句

mysqldump -h localhost -u root -p --all-databases > /home/mysql_bak/#{DATE}.sql  --备份全库
mysqldump -h localhost -u root -p -B testdb > /home/mysql_bak/testdb.sql
mysqldump -h localhost -u root -p -B testdb1 > /home/mysql_bak/testdb1.sql
...
1
2
3
4

卸载MySql,先停止再删除mysql服务

systemctl stop mysql    #服务方式
mysqladmin -u root shutdown     #命令方式 
rm -f /etc/rc.d/init.d/mysqld
systemctl daemon-reload
1
2
3
4

如果是使用rpm或yum包管理工具方式安装的,则先看安装状态,运行命令

rpm -qa | grep -i mysql 
#...或 
yum list installed | grep mysql
1
2
3

如果有结果输出则表示已安装,通过运行命令卸载

rpm -e --nodeps mysql*  #强力删除,--nodeps 一并删除依赖文件
#...或
yum remove -y mysql*
1
2
3

查找对应mysql文件,并删除

find / -name mysql
find / -name mysql |xargs rm -rf #删除
1
2

通过以上操作,mysql卸载完成

# 下载MySql源码包

1.mysql官方下载地址:https://dev.mysql.com/downloads/mysql/ (opens new window),选择对应的版本下载到本地。

注意源码有2个版本可选择,由于mysql从5.7版本开始便依赖boost库,所以有包含boost版和不包含boost版;如果选择不包含boost则预编译的时候需要单独安装boost,第一次安装推荐选择包含boost版。

boost官方下载地址:https://sourceforge.net/projects/boost/files/boost/ (opens new window) 将源码包上传到服务器/usr/local/src目录

scp ./mysql-5.7.38.tar.gz root@119.23.233.64:/usr/local/src

2.或者使用命令直接下载到服务器

cd /usr/local/src
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38.tar.gz

# 编译源码包,并安装

解压压缩文件

tar -xzvf mysql-5.7.38.tar.gz

安装编译工具

yum -y install make cmake gcc gcc-c++ ncurses ncurses-devel libaio libaio-devel

创建mysql安装目录、数据库存放目录、日志目录

mkdir -p /usr/local/webserver/mysql
mkdir -p /usr/local/webserver/mysql/data
mkdir -p /usr/local/webserver/mysql/logs
mkdir -p /usr/local/webserver/mysql/binlog

进入到MySQL的源码目录,预编译,配置安装目录

cd /usr/local/src/mysql-5.7.38

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DSYSTEMD_PID_DIR=/usr/local/webserver/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/webserver/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1  \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_BOOST=boost
# -DWITH_SYSTEMD=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

参数说明:

  • -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 指定安装目录
  • -DINSTALL_DATADIR=/usr/local/mysql/data 指定数据库存放目录
  • -DDEFAULT_CHARSET=utf8 使用utf8字符
  • -DDEFAULT_COLLATION=utf8_general_ci 校验字符
  • -DWITH_SYSTEMD 决定是否安装mysqld_safe

预编译报错通常是因为缺少依赖的包造成的,把缺少的包安装上再重新进行编译。 如上错误是boost位置错误导致改为正确位置:-DWITH_BOOST=../boost,再重新预编译,重新编译时,需要清除旧的对象文件和缓存信息

make clean \
rm -f CMakeCache.txt

运行命令,正式编译并安装,此过程一般比较久,请耐心等待

make && make install

经过以上操作,编译安装完成。

# 配置MySql

进入/etc目录编辑my.cnf文件(windows系统下为my.ini),如果没有my.cnf文件则新建此文件

touch /etc/my.cnf
vim /etc/my.cnf

[client]
port = 3306
socket = /usr/local/webserver/mysql/mysql.sock
 
[mysql]
port = 3306
default-character-set = utf8
socket = /usr/local/webserver/mysql/mysql.sock

[mysqld]
user = mysql
port = 3306
character_set_server = utf8
default-storage-engine = INNODB

pid-file = /usr/local/webserver/mysql/mysqld.pid
basedir = /usr/local/webserver/mysql
datadir = /usr/local/webserver/mysql/data
socket = /usr/local/webserver/mysql/mysql.sock

#免密登录,用于忘记root密码,重置密码时使用
#skip-grant-tables

#log_output = FILE
# 二进制日志
server-id = 1
binlog-format = ROW
log_bin = /usr/local/webserver/mysql/logs/binlog # 二进制日志名称
# 错误日志
log_error = /usr/local/webserver/mysql/logs/error.log
# 常规查询日志
#general_log = 0
#general_log_file = /usr/local/webserver/mysql/logs/general.log
# 慢查询日志
slow_query_log = 1
slow_query_log_file = /usr/local/webserver/mysql/logs/slow.log
long_query_time = 3

[mysqldump]
quick
max_allowed_packet = 32M
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

配置环境变量

echo 'export MYSQLPATH=/usr/local/webserver/mysql' >> /etc/profile
echo 'export PATH=$MYSQLPATH/bin:$MYSQLPATH/lib:$PATH' >> /etc/profile
source /etc/profile

增加权限,不然日志无法写入

chown mysql:mysql /etc/my.cnf
chown -R mysql:mysql /usr/local/webserver/mysql
chmod 770 -R /usr/local/webserver/mysql

初始化数据库命令

mysqld --initialize --user=mysql

初始化成功后,可以在输出日志,或者logs/error.log日志里面找到root管理员的初始密码

创建MySQL服务

cd /usr/local/webserver/mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld 
chkconfig --add mysqld
chkconfig --level 35 mysqld on  #设置开机启动
1
2
3
4

启动MySQL服务

systemctl start mysql
systemctl status mysql

出现如下界面,说明MySQL已经安装完成,并部署成功...

# 连接MySQL

通过以上操作成功将mysql数据库安装到服务器,接下来我们在服务器用mysql客户端连接数据库,进行root管理员的配置 首次登录,必须先修改root的初始秘密才能进行其他操作

alter user 'root'@'localhost' identified by 'xxxxx';
1

设置数据库允许远程登录

update user set host = '%' where user = 'root';
flush privileges;
1
2

再使用客户端连接工具测试,是否能连接到数据库

客户端连接成功,可以看到系统数据库,并查询到数据 以上就是,在Linux服务器使用源码方式安装MySQL数据库,的全部步骤

# 还原备份

最后需要将之前备份的数据库进行还原

mysql -h localhost -u root -p < testdb.sql
Last Updated: 6/5/2023, 2:49:16 PM