本例假设将所有安装文件下载到 /data/soft 目录。
export soft_dir="/data/soft"
1
# 安装编译环境cmake3(centos7)
如果环境中未安装cmake3,则需要安装,推荐安装如下。
注意,此方法会在系统中另外安装一个cmake3,不是升级原来的cmake2,因此使用时需修改命令为: cmake3 。。。。
yum install epel-release
yum install cmake3
1
2
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
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
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
2
3
4
5
6
7
# 创建 mysql 用户及组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
1
2
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
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
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
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
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
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
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
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
2
# 第四步:创建service脚本
vi /lib/systemd/system/mysql.service
1
2
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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14