本例假设将所有安装文件下载到 /data/soft 目录。

export soft_dir="/data/soft"
1

# 安装编译环境cmake3(centos7)

如果环境中未安装cmake3,则需要安装,推荐安装如下。
注意,此方法会在系统中另外安装一个cmake3,不是升级原来的cmake2,因此使用时需修改命令为: cmake3 。。。。

yum install epel-release
yum install cmake3
1
2

# centos6 安装编译mysql8.0.32版本时需要的库

cd /etc/yum.repos.d
wget --no-check-certificate https://copr.fedoraproject.org/coprs/rhscl/centos-release-scl/repo/epel-6/rhscl-centos-release-scl-epel-6.repo
yum install centos-release-scl
yum install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
1
2
3
4

# centos7 安装编译mysql8.0.32版本时需要的库

yum install centos-release-scl
yum install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
1
2

# 安装 rpcsvc-proto

最新版rpcsvc-proto下载地址 (opens new window)

cd $soft_dir
rm -rf ./rpcsvc-proto-1.4.4
xz -d rpcsvc-proto-1.4.4.tar.xz
tar xvf rpcsvc-proto-1.4.4.tar
cd rpcsvc-proto-1.4.4
./configure
make -j4 && make install
1
2
3
4
5
6
7

# 创建 mysql 用户及组

groupadd mysql 
useradd -r -g mysql -s /bin/false mysql
1
2

# 编译 mysql

最新版mysql下载地址 (opens new window) 本例安装到 /data/mysql 目录下。

cd $soft_dir
rm -rf mysql-boost-8.0.35
tar --no-same-owner -zxvf $soft_dir/mysql-boost-8.0.35.tar.gz
cd $soft_dir/mysql-8.0.35

[ -e /usr/local/lib/libtcmalloc.so ] && { je_tc_malloc=2; EXE_LINKER="-DCMAKE_EXE_LINKER_FLAGS='-ltcmalloc'"; }
[ -e /usr/local/lib/libjemalloc.so ] && { je_tc_malloc=1; EXE_LINKER="-DCMAKE_EXE_LINKER_FLAGS='-ljemalloc'"; }
echo $EXE_LINKER

cmake -DCMAKE_INSTALL_PREFIX=/data/mysql \
-DSYSCONFDIR=/data/mysql/etc \
-DMYSQL_DATADIR=/data/mysql/data \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysqld.sock \
-DMYSQL_USER=mysql \
-DEXTRA_CHARSETS=all \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EXTRA_CHARSETS:STRING=utf8,utf8mb4 \
-DWITH_DEBUG=0 \
-DENABLE_DEBUG_SYNC=OFF \
-DWITH_ZLIB=bundled \
-DWITH_LIBWRAP=0 \
-DENABLE_DOWNLOADS=1 \
-DWITH_COMMENT='string' \
-DENABLED_ASSEMBLER:BOOL=ON	\
-DWITH_CLIENT_LDFLAGS:STRING=all-static	\
-DWITH_MYSQLD_LDFLAGS:STRING=-all-static	\
-DWITH_FAST_MUTEXES:BOOL=ON	\
-DWITH_BIG_TABLES:BOOL=ON	\
-DMYSQL_MAINTAINER_MODE:BOOL=OFF	\
-DENABLE_PROFILING=0 \
-DWITH_SSL=system \
-DWITH_SAFEMALLOC=OFF \
-DWITH_BOOST=boost \
-DDOWNLOAD_BOOST=1 \
-DWITH_READLINE=1 \
-DFORCE_INSOURCE_BUILD=1 \
$EXE_LINKER 

make -j4 && make install
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
45
46
47
48
49

# 创建 mysql 日志文件

touch /data/mysql/mysql.log
1

# 创建 mysql 配置文件

vi /data/mysql/my.cnf
1
点击查看my.cnf样例
[mysqld]
user    = mysql
port    = 3306
pid-file        = /data/mysql/mysqld.pid
socket          = /data/mysql/mysqld.sock
datadir         = /data/mysql/data
log-error       = /data/mysql/mysql.log

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
lower_case_table_names = 1
# mysql8.4 需配置的验证方式
mysql_native_password = 1

max_connections = 500

skip-name-resolve
skip-external-locking

# 日志相关
slow_query_log=0  #关闭记录慢查询
#long_query_time=2  #设置慢查询时间2s
#slow_query_log_file="/data/mysql/log/blg-slow.log"  #慢查询日志保存路径
#log_queries_not_using_indexes = on #开启记录没有使用索引查询语句

#log_throttle_queries_not_using_indexes = 10
#expire_logs_days = 90
#min_examined_row_limit = 100
#general_log=0 #关闭记录所有sql语句
 
# binlog设置 
#master_info_repository = TABLE
#relay_log_info_repository = TABLE
log_bin = bin.log
server-id=150
 
# innodb 设置
default_storage_engine = InnoDB
#innodb_open_files = 300 #限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。默认是300
innodb_buffer_pool_size = 2G
#innodb_write_io_threads = 4 #默认是4
innodb_read_io_threads = 8  #默认是4
innodb_flush_log_at_trx_commit = 2
#innodb_log_buffer_size = 2M
innodb_log_file_size = 64M  #默认是4M
innodb_log_files_in_group = 3
#innodb_lock_wait_timeout = 20 #默认50
#innodb_io_capacity = 4000
#innodb_io_capacity_max = 8000
 
# 默认参数设置
#symbolic-links=0
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# mysql 8.0需打开
# default_authentication_plugin=mysql_native_password

# MySQL读入缓冲区的大小
read_buffer_size = 8M
# MySQL的随机读缓冲区大小、MySQL的顺序读缓冲区大小
read_rnd_buffer_size = 4M
sort_buffer_size = 32M
# 连接超时时间、保持时间、最大传输数据包大小
#wait_timeout=2880000
#interactive_timeout=2880000
# 连接缓存池大小、临时表大小、临时存放位置
join_buffer_size = 16M
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

# 赋 mysql 权限

chown mysql:mysql -R /data/mysql
1

# 初始化 mysql 数据库

/data/mysql/bin/mysqld --defaults-file=/data/mysql/my.cnf --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data  --lower-case-table-names=1
#密码在日志文件最后一行中,通过以下命令查看:
cat /data/mysql/mysql.log
1
2
3

# 设置自启动服务(方式1)

注:本方式适合Centos6、7、8版本

# 第一步:创建服务脚本

#适合centos的6、7版本
cp -f support-files/mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
chmod +x /etc/init.d/mysql

#适合centos的8版本
cp -f support-files/mysql.server /usr/lib/systemd/system/mysql.service

1
2
3
4
5
6
7
8

# 第二步:启动服务

systemctl start mysql.service
systemctl enable mysql.service

service mysql start
chkconfig mysql on
systemctl enable mysql
1
2
3
4
5
6

# 设置自启动服务(方式2)

# 第一步:创建启动服务脚本

在mysql目录(例如:/data/mysql/) 创建启动服务的脚本start.sh

vi /data/mysql/start.sh
1
点击查看start.sh内容
#!/bin/bash

/data/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my.cnf >/dev/null &
exit 0

1
2
3
4
5

# 第二步:创建停止服务脚本

在mysql目录(例如:/data/mysql/) 创建停止服务的脚本stop.sh

vi /data/mysql/stop.sh
1
点击查看stop.sh内容
#!/bin/bash

if test -s /data/mysql/mysqld.pid  
then  
    mysqld_pid=\`cat /data/mysql/mysqld.pid\`  
    if (kill -0 $mysqld_pid 2>/dev/null)  
    then  
        echo $echo_n "Shutting down MySQL"  
        kill $mysqld_pid  
    fi  
fi  
1
2
3
4
5
6
7
8
9
10
11

# 第三步:赋予执行权限

分别赋予start.sh 和 stop.sh 执行权限

chmod +x /data/mysql/start.sh
chmod +x /data/mysql/stop.sh
1
2

# 第四步:创建service脚本

vi /lib/systemd/system/mysql.service

1
2
点击查看mysql.service内容
[Unit]

Description=mysql

After=network.target

[Service]

Type = forking

ExecStart = /data/mysql/start.sh

ExecStop = /data/mysql/stop.sh

[Install]

WantedBy = multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 设置权限

chmod 754 /lib/systemd/system/mysql.service

# 第五步:启动或停止服务

# 启动服务 
systemctl start mysql.service
# 关闭服务   
systemctl stop mysql.service  
1
2
3
4

如果发现启动错误,修改启动脚本后需重新加载

systemctl daemon-reload
1

# 第六步:设置为自启动服务

systemctl enable mysql.service
1

# 修改 mysql 初始化密码

cd /data/mysql/bin

 /data/mysql/bin/mysql -u root  -p'密码' #密码在/data/mysql/mysql.log文件最后一行中
 #修改密码:
 > ALTER USER "root"@"localhost" IDENTIFIED  BY "xiong";
 > CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'xiong';
 > grant all privileges on *.* to 'root'@'127.0.0.1';
 > CREATE USER 'xiongsy'@'%' IDENTIFIED BY 'xiongsy@cqupt.edu.cn';
 > grant all privileges on *.* to 'xiongsy'@'%';

# 针对数据库创建该数据库的用户并设置权限
 > CREATE USER 'bs-dianli'@'%' IDENTIFIED BY 'bs-dianli';
 > grant all privileges on `bs\-dianli`.* to 'bs-dianli'@'%';

1
2
3
4
5
6
7
8
9
10
11
12
13
14