一、下载源码包

1.1 下载mysql源码包
mkdir /application
cd /application
https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.20.tar.gz
1.2下载boost
下载网址为:http://www.boost.org/users/download/
这个版本的MySQL要求boost的版本是1.59,链接为:
http://www.boost.org/users/history/version_1_59_0.html
下面给出boost 1.59.0的链接,在/usr/local/src目录下直接用wget进行下载
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz

wget --no-check-certificate http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

注意:安装boost库
如果下载的是不带boost版的MySQL源码包,那么需要先安装boost包。我用的mysql-boost-5.7.20.tar.gz里的boost包。
如果下载的是带boost版的mysql源码包,那么这步直接跳转,记住boost包的位置就行了。

二、编译安装

2.1 安装必要的软件依赖:
yum install -y cmake bison bison-devel libaio-devel gcc gcc-c++ git ncurses-devel
2.2 解压MySQL源文件:
cd /application
tar xf mysql-5.7.20.tar.gz

将boost的压缩包移动至解压后的源文件目录内:

mv boost_1_65_1.tar.gz mysql-5.7.20
2.3 进入MySQL源文件目录,新建configure做为编译目录,并进入该目录:
cd mysql-5.7.20
mkdir configure
cd configure
2.4 使用cmake进行生成编译环境:
cmake .. -DBUILD_CONFIG=mysql_release \
-DINSTALL_LAYOUT=STANDALONE \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DENABLE_DTRACE=OFF \
-DWITH_EMBEDDED_SERVER=OFF \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_SSL=bundled \
-DWITH_ZLIB=system \
-DWITH_PAM=ON \
-DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \
-DMYSQL_DATADIR=/application/mysql-5.7.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EDITLINE=bundled \
-DFEATURE_SET=community \
-DCOMPILATION_COMMENT="MySQL Server (GPL)" \
-DWITH_DEBUG=OFF \
-DWITH_BOOST=..

解释:

#程序存放位置
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \
#数据存放位置
-DMYSQL_DATADIR=/application/mysql-5.7.20/data \
#socket文件存放位置
-DMYSQL_UNIX_ADDR=/applicationmysql-5.7.20/tmp/mysql.sock \
#使用utf8字符集
-DDEFAULT_CHARSET=utf8 \
#校验规则
-DDEFAULT_COLLATION=utf8_general_ci \
#使用其他额外的字符集
-DWITH_EXTRA_CHARSETS=all \
#支持的存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#禁用的存储引擎
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
#启用zlib库支持(zib、gzib相关)
-DWITH_ZLIB=bundled \
#启用SSL库支持(安全套接层)
-DWITH_SSL=bundled \
#启用本地数据导入支持
-DENABLED_LOCAL_INFILE=1 \
#编译嵌入式服务器支持
-DWITH_EMBEDDED_SERVER=1 \
# mysql5.6支持了google的c++mock框架了,允许下载,否则会安装报错。
-DENABLE_DOWNLOADS=1 \
#禁用debug(默认为禁用)
-DWITH_DEBUG=0
#编译

如果编译出现错误,请先删除CMakeCache.txt后,再重新编译:

rm -rf CMakeCache.txt

如果出现下面的提示就表示成功生成了编译环境:

-- Configuring done
-- Generating done
2.5 使用make进行编译:
make

编译完成后,会出现如下信息:

[100%] Building CXX object sql/CMakeFiles/udf_example.dir/udf_example.cc.o
Linking CXX shared module udf_example.so
[100%] Built target udf_example
Scanning dependencies of target my_safe_process
[100%] Building CXX object mysql-test/lib/My/SafeProcess/CMakeFiles/my_safe_process.dir/safe_process.cc.o
Linking CXX executable my_safe_process
[100%] Built target my_safe_process
2.6 安装MySQL:
make install

#做软链接

ln -s /application/mysql-5.7.20/ /application/mysql

三、初始化数据库

3.1 添加mysql用户:
useradd -s /sbin/nologin mysql
3.2 新建数据库文件夹及日志文件夹,并更改用户为mysql:
创建数据存放目录
mkdir /application/mysql-5.7.20/data  -p
创建socket文件目录======(二进制自动默认在tmp目录下)
mkdir /application/mysql-5.7.20/tmp -p
创建日志目录
mkdir /var/mysql/log -p
授权
chown -R mysql:mysql /application/mysql-5.7.20/data
chown -R mysql:mysql /application/mysql-5.7.20/tmp
chown -R mysql:mysql /var/mysql/log
3.3 修改配置文件
vim /etc/my.cnf
将[mysqld]项下的内容替换为:

复制代码
[root@localhost mysql-5.7.20]# vim /etc/my.cnf
[mysqld]
user=mysql
port=3306
datadir=/application/mysql-5.7.20/data
socket=/application/mysql-5.7.20/mysql/tmp/mysql.sock
log_error=/var/mysql/log/error.log
basedir=/application/mysql-5.7.20
3.4 初始化数据库:

注意:
初始化数据库的时候不能有相关的数据库启动,比如mariadb。。。。。

/application/mysql/bin/mysqld --initialize-insecure --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql

2021-07-13T12:57:27.866566Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-07-13T12:57:28.130713Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-07-13T12:57:28.177124Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-07-13T12:57:28.235294Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: e0b5d1f5-e3d9-11eb-aa56-000c295e5b3e.
2021-07-13T12:57:28.236328Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-07-13T12:57:28.237355Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
查看数据文件是否生成:

复制代码
[root@localhost mysql]# ll data/
总用量 110628
-rw-r-----. 1 mysql mysql 56 8月 14 16:09 auto.cnf
-rw-r-----. 1 mysql mysql 419 8月 14 16:09 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 8月 14 16:09 ibdata1
-rw-r-----. 1 mysql mysql 50331648 8月 14 16:09 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 8月 14 16:09 ib_logfile1
drwxr-x---. 2 mysql mysql 4096 8月 14 16:09 mysql
drwxr-x---. 2 mysql mysql 8192 8月 14 16:09 performance_schema
drwxr-x---. 2 mysql mysql 8192 8月 14 16:09 sys
复制代码
查看日志文件是否生成:

[root@localhost mysql]# ll /var/mysql/log/
总用量 4
-rw-r-----. 1 mysql mysql 802 8月 14 16:09 error.log

四、配置启动文件及环境变更并启动

4.1 配置启动文件

1.从模板文件中复制启动文件:

cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld

2.修改启动文件:

vim /etc/init.d/mysqld
找到如下二行:

basedir=
datadir=
修改为:
basedir=/application/mysql/
datadir=/application/mysql/data
复制代码

3.启动mysql:

chown -R mysql:mysql /application/mysql-5.7.20/
[root@localhost mysql]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

4.配置system管理MySQL服务

#配置
[root@db01 support-files]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart= /application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
#启动mysql
[root@db01 support-files]# systemctl start mysqld.service

5.配置MySQL环境变量:

echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
source /etc/profile

6.测试进入一下======用mysql.sock文件连接

mysql -S /application/mysql/tmp/mysql.sock
4.2 修改root的初始密码

第一种方法:

1.查看root的初始密码

MySQL从5.7开始不支持安装后使用空密码进行登录,因此在这里需要先查询程序生成的临时密码:

[root@nfs data]# cat /var/mysql/log/error.log |grep 'A temporary password'
2021-07-13T12:47:57.023504Z 1 [Note] A temporary password is generated for root@localhost: >A/iO!_a=8mn

最后一行冒号后面的部分>A/iO!_a=8mn就是初始密码。

2. 登录MySQL并修改初始密码:
使用初始密码登录MySQL:

[root@localhost ~]# mysql -uroot -p
Enter password:
登录后立即修改root密码:

mysql> alter user 'root'@'localhost' identified by 'your_password';
Query OK, 0 rows affected (0.00 sec)
其中your_password是你设置的新密码。新密码应是强密码,要求密码包含大小写字母、数字及标点符号,长度应该在6位以上。

3.给予root所有权限

mysql> grant all privileges on *.* to root@"%" identified by 'aaaaaaa' with grant option; 
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

第二种方法:

或者直接使用mysqladmin设置密码
[root@nfs data]# mysqladmin -uroot -p password 123
Enter password:  ###直接回车
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

测试登录:

[root@nfs data]# mysql -uroot -p
Enter password: 
......
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
......