0%

二进制安装 MySQL 5.7.18

二进制安装 MySQL 5.7.18

使用二进制文件安装 MySQL 5.7.18。

CentOS 版本:6.7 x86_64

MySQL 版本:5.7.18

安装 MySQL

安装所需依赖包

1
2
3
4
5
6
7
cd /etc/yum.repos.d
rename .repo .bak *.repo
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
sed -i 's@^exclude@#exclude@' /etc/yum.conf
yum clean all
yum makecache
yum -y install libaio autoconf

解压 MySQL

1
2
3
4
cd /root
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
tar xvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql

安装 jemalloc 4.5.0

1
2
3
4
5
6
7
8
9
cd /root
wget https://github.com/jemalloc/jemalloc/archive/4.5.0.tar.gz
tar xvf 4.5.0.tar.gz
cd jemalloc-4.5.0
./autogen.sh
make && make install_bin install_include install_lib
ln -s /usr/local/lib/libjemalloc.so.2 /usr/lib64/libjemalloc.so.1
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
ldconfig

配置初始化 MySQL

添加 MySQL 环境变量

1
2
echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
source /etc/profile

添加 MySQL 用户

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

添加目录权限

1
2
3
chown -R mysql:mysql /usr/local/mysql
mkdir -p /home/mysql/data /home/mysql/bin-log /home/mysql/relay-log /home/mysql/log
chown -R mysql:mysql /home/mysql

配置 MySQL 服务

1
2
3
4
5
6
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i "s@^basedir=.*@basedir=/usr/local/mysql@" /etc/init.d/mysqld
sed -i "s@^datadir=.*@datadir=/home/mysql/data@" /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

添加 MySQL 配置文件

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
cat > /etc/my.cnf << EOF
[client]

port = 3306
default-character-set = utf8
socket = /home/mysql/data/mysql.sock

[mysql]

port = 3306
default-character-set = utf8
socket = /home/mysql/data/mysql.sock
prompt = 'MySQL[\\u@\\d]> '
no-auto-rehash

[mysqld]

# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /home/mysql/data/mysql.sock
pid-file = /home/mysql/data/mysql.pid
character-set-server = utf8
port = 3306

# MyISAM #
key-buffer-size = 32M

# SAFETY #
max-allowed-packet = 1024M
max-connect-errors = 1000000

# DATA STORAGE #
basedir = /usr/local/mysql
datadir = /home/mysql/data

# BINARY LOGGING #
server_id = 1
#log-bin = /home/mysql/bin-log
#expire-logs-days = 3
sync-binlog = 1
relay_log_recovery = 1
relay-log = /home/mysql/relay-log
binlog_format = row

# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 500
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048

# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 128M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 1G
innodb_buffer_pool_instances = 1

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
skip-name-resolve
skip-external-locking
init-connect = 'SET NAMES utf8'

# LOGGING #
log-error = /home/mysql/log/error.log
log-queries-not-using-indexes = 1
#slow-query-log = 1
#slow-query-log-file = /home/mysql/log/slow.log
#general-log = 1
#general_log_file = /home/mysql/log/general.log
#long_query_time = 3
log_timestamps = system

[mysqld_safe]

log-error = /home/mysql/log/error.log
socket = /home/mysql/data/mysql.sock
pid-file = /home/mysql/data/mysql.pid
nice = 0

[mysqldump]

socket = /home/mysql/data/mysql.sock
quick
max_allowed_packet = 1024M

[myisamchk]

key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /home/mysql/log/mysqld_multi.log

EOF

初始化数据库

1
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data

使用 jemalloc 内存分配器

1
sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /usr/local/mysql/bin/mysqld_safe

启动 MySQL

1
service mysqld start

修改 root 密码

1
2
mysql -e "grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'password' with grant option;"
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;"

参考