MySQL数据库的安装
1 总体规划
MySQL可运行的最小资源需求极低。InnoDB缓冲池的默认大小仅128M。基于基准测试数据,MySQL内存占用从1G到64G运行效率提升明显,CPU从1核至48核运行效率提升明显,进一步增加资源性能提升趋于平缓。而建议单数据库主机数据库内存设置在40%-60%左右。建议主机内存不超过126G,CPU核数不超过48核。
操作系统 |
CentOS Linux release 7.5.1804 |
处理器 |
1 |
内存 |
4G |
硬盘 |
38G |
主机名称 |
chenzx |
IP地址 |
192.168.56.8 |
1.1 用户组和用户规划
MySQL数据库建议运行在特定的用户与用户组下。对于同一主机安装不同MySQL数据库的场景,建议使用不同的用户管理不同的数据库。
用户ID |
用户名称 |
用户组ID |
用户组名称 |
备注 |
1001 |
mysql |
1001 |
mysql |
数据库操作系统用户 |
用户不存在则很使用以下命令创建:
# groupadd -g 1001 mysql
# useradd –u 1001 –g mysql mysql
若已存在则使用以下命令修改:
# groupmod -g 1001 mysql
# usermod -s /bin/bash -u 1001 mysql
1.2 网络规划
应用通过服务IP接入PROD数据库,故障时通过服务IP的漂移实现高可用性。本文不涉及高可用部分,需要开放3306端口,固定IP用于复制接入,服务IP用于应用接入。
接口名 |
主机名 |
IP地址 |
端口 |
描述 |
ens32 |
chenzx |
192.168.5.68 |
3306 |
固定IP地址 |
1.3 数据库文件系统规划
数据库相关文件系统规划,一个好的文件系统规划,有利于后续运维人员进行维护。
路径 |
文件系统大小 |
功能说明 |
/mysql/mysql_data |
200GB |
数据目录,存放数据文件,大小根据数据量而定。 |
/mysql/mysql_log |
200GB |
数据库redo、bin-log、relay-log等日志,可以根据具体需求再进行拆分。 |
/mysql/mysql_dump |
100GB |
备份目录,数据库备份或者其他数据文件备份。 |
创建相关目录:
# mkdir –p /mysql/mysql_data
# mkdir –p /mysql/mysql_log
# mkdir –p /mysql/mysql_dump
修改相关目录的属组信息:
# chown –R mysql:mysql /mysql/mysql_data
# chown –R mysql:mysql /mysql/mysql_log
# chown –R mysql:mysql /mysql/mysql_dump
数据库目录规划:
路径 |
功能说明 |
/mysql/mysql-5.7.23 |
区分版本的软件安装目录,软连接(/usr/local/mysql)指向目录 |
/home/mysql |
mysql用户家目录 |
/mysql/mysql_data/mysql |
数据目录,存放数据文件 |
/mysql/mysql_data/tmp |
临时数据目录 |
/mysql/mysql_log/redolog |
redo日志目录 |
/mysql/mysql_log/binlog |
二进制日志目录 |
/mysql/mysql_log/relaylog |
复制用中继日志目录 |
/mysql/mysql_log/slowlog |
指定慢查询日志目录 |
/mysql/mysql_log/innodb |
InnoDB日志目录 |
/mysql/mysql_log/errlog |
错误日志目录 |
创建相关目录:
# mkdir –p /mysql/mysql_log/redolog
# mkdir –p /mysql/mysql_log/binlog
# mkdir –p /mysql/mysql_log/relaylog
# mkdir –p /mysql/mysql_log/slowlog
# mkdir –p /mysql/mysql_log/innodb
# mkdir –p /mysql/mysql_log/errlog
修改相关目录的属组信息:
# chown –R mysql:mysql /mysql/mysql_log/redolog
# chown –R mysql:mysql /mysql/mysql_log/binlog
# chown –R mysql:mysql /mysql/mysql_log/relaylog
# chown –R mysql:mysql /mysql/mysql_log/slowlog
# chown –R mysql:mysql /mysql/mysql_log/innodb
# chown –R mysql:mysql /mysql/mysql_log/errlog
注意:
MySQL数据目录规划因根据数据库预计承载的数据量而定,当超过1T时,建议规划多个数据目录。
MySQL安装目录所在的文件系统,建议保持15G左右的空闲,用于后续升级。
MySQL redo日志目录大小应根据数据库日常写入量而定,建议15G左右。
MySQL 二进制日志存放归档的操作记录,根据数据库的繁忙程度,建议在50-100G左右。
如果是集群架构,需要计划中继日志目录。中继日志大小根据主库二进制日志产生量而定,一般是主库二级制目录大小的50%。
2 系统参数配置
3 MySQL安装
3.1 下载mysql介质
本文主要介绍MySQL社区版二进制软件包的安装过程。一般情况下,PROD环境和TEST环境都应该选用GA版本,切勿使用DMR版本、RC版本和Beta版本。二进制软件包可以到官网(https://www.mysql.com/downloads/)进行下载。
点击社区版本后进入下一个界面,选择“MySQL Community Server”。
3.2 上传介质并校验
使用scp或者ftp等工具把安装包(mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz)上传至服务器,并使用命令生成软件安装包的md5码与官网md5码进行比对:
$ md5sum mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
比对结果必须一致!!!
官网提供MD5码 |
下载后生成MD5码 |
比对结果 |
d903d3dbf235b74059a4b3e216c71161 |
|
一致 |
3.3 安装MySQL
二进制的安装方式中,官方版本中已经把所有功能都配置好了,安装使用起来方便简单。
1) 解压安装包
$ su - mysql
$ tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /mysql/
2) 解压文件改名
$ su - mysql
$ mv mysql-5.7.23-linux-glibc2.12-x86_64/ mysql-5.7.23/
3) 建立软链接
$ su -
# ln -s /mysql/mysql-5.7.23/ /usr/local/mysql
# chown mysql:mysql -R /usr/local/mysql
3.4 初始化MySQL
由于是二进制安装,数据库的配置文件需要自己配置。
$ cat /etc/my.cnf
[mysql]
prompt="\u@\h:\p \R:\m:\s [\d]>"
[client]
port=3306
socket=/tmp/mysql.sock
[mysql_multi]
mysqld = /usr/local/mysql/bin/mysqld
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = mysql
[mysqld]
############################ system ##################################
basedir = /usr/local/mysql
server-id = 189
port = 3306
user = mysql
read_only = off
character-set-server = utf8
socket = /tmp/mysql.sock
datadir = /mysql/mysql_data/mysql
lower_case_table_names = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
show_compatibility_56 = on
#skip_slave_start = 1
explicit_defaults_for_timestamp = ON
skip-name-resolve
log_timestamps = SYSTEM
#skip_grant_tables
############################ log ##################################
max-binlog-size = 1G
binlog_cache_size = 2097152
master_info_repository = TABLE
innodb_log_group_home_dir = /mysql/mysql_log/innodb/
log-bin = /mysql/mysql_log/binlog/logbin.log
relay_log = /mysql/mysql_log/relaylog/relay.log
log-error = /mysql/mysql_log/errlog/error.err
slow-query-log-file = /mysql/mysql_log/slowlog/slow.log
slow-query-log = 1
long_query_time = 1
relay_log_info_repository = TABLE
relay_log_recovery = 1
slave_preserve_commit_order = 1
log-queries-not-using-indexes = 0
expire_logs_days = 7
binlog_format = row
sync-binlog = 1
log_bin_trust_function_creators = 1
########################### connection ##############################
open-files-limit = 65535
symbolic-links = 0
max_allowed_packet = 1024M
max_connections = 3000
max_user_connections = 3000
max_connect_errors = 1000000
transaction_isolation = READ-COMMITTED
########################### BUFFER ##############################
query-cache-type = 0
query-cache-size = 0
thread-cache-size = 50
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_print_all_deadlocks = 1
innodb_log_file_size = 1G
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_log_files_in_group = 3
################GTID#################
#gtid_mode = 1
#enforce_gtid_consistency = 1
slave_parallel_workers = 4
slave_parallel_type = LOGICAL_CLOCK
slave_preserve_commit_order = 1
log_slave_updates = 1
[mysqld_safe]
log-error = /mysql/mysql_log/errlog/error.err
pid-file = /mysql/mysql.pid
注意:
MySQL读取配置文件的顺序是
1) /etc/my.cnf
2) /etc/mysql/my.cnf
3) /usr/local/mysql/etc/my.cnf~/.my.cnf
创建数据库
$ /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysql/mysql_data/mysql --user=mysql --initialize
3.5 启动MySQL
$ /usr/local/mysql/bin/mysqld_safe --user=mysql&