CentOS7.6 二进制安装MySQL 5.7.35

目录

1 安装MySQL

1.1 删除已安装的MySQL

1.2 创建用户和组

1.3 解压安装包

1.4 创建数据目录

1.5 初始化数据库

2 安装后设置


5.7版本的二进制比较简单,基本按照官方文档简单几步即可完成安装,稍显复杂的是参数配置,此示例给的参数是一些经验值,能适合大部分环境,且保持性能较优;剩余的规范就是安装目录的规范。

操作系统为CentOS 7.6版本

测试服务器内存为3G, 后面安装的参数innodb_buffer_pool_size需要根据物理内存大小配置: 

CentOS7.6 二进制安装MySQL 5.7.35_第1张图片

 MySQL数据及日志目录结构:

CentOS7.6 二进制安装MySQL 5.7.35_第2张图片

 MySQL程序解压到在/usr/local目录,并创建软连接/usr/local/mysql 指向软件解压目录。

1 安装MySQL

MySQL二进制包下载地址:

https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gzhttps://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz

1.1 删除已安装的MySQL

# 检查是否有历史版本mysql
rpm -qa | grep -i mysql

# 检查是否有mariadb组件安装
rpm -qa | grep -i mariadb

# 根据上个命令查出来的CentOS自带的mariadb组件,进行删除
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

1.2 创建用户和组

# 创建mysql用户组
groupadd mysql

# 创建mysql用户,指定组是mysql,并严禁mysql用户登录
useradd -r -g mysql -s /bin/false mysql

1.3 解压安装包

# 解压缩二进制包到/usr/local目录
tar -xvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

# 创建软连接mysql指向刚解压的二进制包
ln -s /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql

1.4 创建数据目录

# 其实末级目录不创建,初始化的时候也会自动创建,但/data/mysql_3306必须创建且有权限
mkdir -p /data/mysql_3306/{data,log,binlog,redolog,relaylog,undolog,tmp,backup}
chown -R mysql:mysql /data/mysql_3306
chmod 750 /data/mysql_3306

1.5 初始化数据库

# 修改环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

# 创建/etc/my.cnf文件,并写入参数
vi /etc/my.cnf

# 初始化mysql
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

# 启动mysql
mysqld_safe --defaults-file=/etc/my.cnf &

/etc/my.cnf 参数:  

[client]
#password = 88888888
port = 3306
socket = /data/mysql_3306/data/mysql.sock
 
[mysql]
socket=/data/mysql_3306/data/mysql.sock
 
[mysqld]
user = mysql
port = 3306
datadir = /data/mysql_3306/data
socket = /data/mysql_3306/data/mysql.sock
pid-file = /data/mysql_3306/data/mysqld.pid
symbolic-links=0

########basic settings########
server-id = 89
#bind_address = *
autocommit = 1
character_set_server=utf8mb4
skip_name_resolve = 1
max_connections = 1000
max_connect_errors = 100
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
join_buffer_size = 1M
#tmp_table_size = 128M
max_allowed_packet = 64M
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
interactive_timeout = 120
wait_timeout = 120
read_buffer_size = 8M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
lower_case_table_names = 1
net_read_timeout = 7200
net_write_timeout = 7200
group_concat_max_len = 102400

########security settings########
plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection_control_failed_connections_threshold=10
connection_control_min_connection_delay=2000
connection_control_max_connection_delay=86400000
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT

########log settings########
log-error = /data/mysql_3306/log/mysqld.err
slow_query_log = 1
slow_query_log_file = /data/mysql_3306/log/slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements=1
log_slow_slave_statements=1
log_throttle_queries_not_using_indexes = 10
expire_logs_days = 15
long_query_time = 1
min_examined_row_limit = 0

########replication settings########
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_bin=/data/mysql_3306/binlog/mysql_binlog
sync_binlog = 1
gtid_mode = on
enforce_gtid_consistency = 1
#log_slave_updates = 1
binlog_format = ROW
relay_log=/data/mysql_3306/relaylog/localhost-relay-bin
#relay_log_recovery = 1
#binlog_gtid_simple_recovery = 1
#slave_skip_errors = ddl_exist_errors

########innodb settings########
#innodb_page_size = 16K
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_lock_wait_timeout = 5
innodb_io_capacity = 1000
innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_log_group_home_dir = /data/mysql_3306/redolog
innodb_log_files_in_group = 3
innodb_log_file_size = 500M
innodb_undo_directory = /data/mysql_3306/undolog
#innodb_undo_logs = 128
innodb_undo_tablespaces = 2
#innodb_flush_neighbors = 1
#innodb_log_buffer_size = 16M
#innodb_thread_concurrency = 0
innodb_print_all_deadlocks = 1

########semi sync replication settings########
#plugin_dir=/usr/local/mysql/lib/plugin
#plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
#loose_rpl_semi_sync_master_enabled = 1
#loose_rpl_semi_sync_slave_enabled = 1
#loose_rpl_semi_sync_master_timeout = 5000
 
[mysqld-5.7]
#innodb_buffer_pool_dump_pct = 40
#innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
#innodb_max_undo_log_size = 1G
#innodb_purge_rseg_truncate_frequency = 128
log_timestamps=system
show_compatibility_56=on

/etc/my.cnf 参数解释: 

# 是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
symbolic-links=0
# 开启binlog或启用主从和集群的时候必须指定,建议值设置为IP+端口,每个节点必须不同
server-id = 89
# mysql监听的ip地址,如果是127.0.0.1,表示仅本机访问,默认*,建议*
#bind_address = *
# 开启自动提交,默认开启,建议开启
autocommit = 1
# 服务器默认字符集,默认latin1,建议utf8mb4
character_set_server=utf8mb4
# 禁用DNS主机名查找,默认关闭,建议开启
skip_name_resolve = 1
# mysql最大连接数,默认151,建议2000
max_connections = 1000
# 最大连接错误次数(默认100),可有效反的防止dos攻击,建议1000
max_connect_errors = 100
# 数据库事务隔离级别,默认REPEATABLE-READ,建议READ-COMMITTED
# 1.READ-UNCOMMITTED(读取未提交内容)级别
# 2. READ-COMMITTED(读取提交内容)
# 3. REPEATABLE-READ(可重读)
# 4.SERIERLIZED(可串行化)
# 默认级别REPEATABLE-READ,Oracle为READ-COMMITTED
transaction_isolation = READ-COMMITTED
# 避免表中有timestamp字段,更新表其他字段时,timestamp字段自动更新为系统时间,默认关闭,建议开启
explicit_defaults_for_timestamp = 1
# 当join是ALL,index,rang或者Index_merge的时候使用的buffer,也被称为FULL JOIN,默认256K,建议1M
join_buffer_size = 1M
# 规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,默认16M,根据实际情况调整
#tmp_table_size = 128M
# 服务器和客户端一次传送数据包的过程中最大限制
max_allowed_packet = 64M
# 定义MySQL应支持的sql语法,对数据的校验等,限制一些所谓的“不合法”的操作
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
# 服务器关闭交互式连接前等待活动的秒数,默认28800(8小时),建议根据实际情况设置
interactive_timeout = 120
# 服务器关闭非交互连接之前等待活动的秒数,默认28800(8小时),建议根据实际情况设置
wait_timeout = 120
# 顺序读缓冲区大小,默认128K
read_buffer_size = 8M
# 随机读缓冲区大小,默认256K
read_rnd_buffer_size = 8M
# 是一个connection级参数,排序缓冲区大小,默认256K,建议默认
sort_buffer_size = 8M
# 控制写redo日志的策略(默认1):
# 0 每秒一次写入OS cache并刷盘到redo logfile:无论是MySQL还是操作系统Crash都可能损失1秒的数据;
# 1 每次事务提交写入OS cache并刷盘到redo logfile:最多损失1个事务(最安全也写性能最低);
# 2 每次事务提交写入OS cache但OS cache每秒刷盘到redo logfile(MySQL Crash但操作系统未Crash则和1是一样的,如果操作系统Crash则和0是一样的);
innodb_flush_log_at_trx_commit = 1

########log settings########
log-error = /data/mysql_3306/log/mysqld.err
# 开启慢查询日志收集
slow_query_log = 1
# 慢查询日志位置
slow_query_log_file = /data/mysql_3306/log/slow.log
# 记录未使用索引的语句
log_queries_not_using_indexes = 1
# 记录那些慢的optimize table,analyze table和alter table语句
log_slow_admin_statements = 1
# 记录由Slave所产生的慢查询
log_slow_slave_statements=1
# 设定每分钟记录的未使用索引的语句数目,超过后只记录语句数量和花费的总时间,默认0(记录所有慢SQL)
log_throttle_queries_not_using_indexes = 10
# 日志自动过期清理天数,默认0(不自动清除)
expire_logs_days = 15
# 设置超过几秒算慢查询,默认10S
long_query_time = 1
# 对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认0(不对扫描行数做限制)
min_examined_row_limit = 0

########replication settings########
# 从机保存主节点信息方式,设成file时会生成master.info和relay-log.info2个文件,设成table,信息就会存在mysql.master_slave_info表中。不管是设置的哪种值,都不要移动或者编辑相关的文件和表
master_info_repository = TABLE
# 用于保存slave读取relay log的位置信息,可选值为“FILE”、“TABLE”
relay_log_info_repository = TABLE
# binlog的保存位置,不能指定确定的文件名如mysql-bin.log,只能指定位置和前缀
log_bin=/data/mysql_3306/binlog/mysql_binlog
# 控制写binlog的方式:
# 0,由OS自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
# n,n次事务提交后,将binlog_cache中的数据强制写入binglog
# 默认1,最安全但写性能最差
# 此参数对主库的数据安全无影响,但可能影响从库数据同步的速度和丢失可能
sync_binlog = 1
# 开启GTID
gtid_mode = on
# 强制GTID的一致性
enforce_gtid_consistency = 1
# slave更新是否记入日志,在做双主架构或级联从库时开启,默认OFF
#log_slave_updates = 1
# binlog日志格式,可选值“MIXED”、“ROW”、“STATEMENT”,默认ROW
binlog_format = ROW
# 从库保存同步中继日志的位置
relay_log=/data/mysql_3306/relaylog/localhost-relay-bin
# 当slave从库relay-log损坏,导致部分中继日志未处理,则自动放弃所有未执行的relay-log,并重新从master上获取日志,以保证relay-log的完整性,默认OFF
#relay_log_recovery = 1
# mysql启动或重启时,搜寻GTIDs时是如何迭代使用binlog文件,开启会提升mysql执行恢复的性能,默认ON
#binlog_gtid_simple_recovery = 1
# 跳过指定error类型,设成all跳过所有错误,默认OFF
#slave_skip_errors = ddl_exist_errors

########innodb settings########
# 默认16K,建议默认
#innodb_page_size = 16K
# innodb内存缓冲池大小,默认128M,建议服务器内存70%-80%
innodb_buffer_pool_size = 2G
# innodb_buffer_pool_size<1G默认1,大于1G默认8,建议默认
#innodb_buffer_pool_instances = 8
# 启动MySQL服务时,将本地热数据加载到InnoDB缓冲池中,默认开启
innodb_buffer_pool_load_at_startup = 1
# 停止MySQL服务时,将InnoDB缓冲池中的热数据保存到本地硬盘,默认开启
innodb_buffer_pool_dump_at_shutdown = 1
# 事务获取资源超时时间,单位是秒,默认50S
innodb_lock_wait_timeout = 5
# 决定mysql的tps,默认200,一般生产数据库都会做raid10,建议1000
# 一般生产系统保持innodb_io_capacity_max值的一半
innodb_io_capacity = 1000
# 决定mysql的tps,默认2000,建议默认
# 参考:sata/sas:200,sas raid10: 2000,ssd:8000,fusion-io(闪存卡):25000-50000
innodb_io_capacity_max = 2000
# 
innodb_flush_method = O_DIRECT
# redo log路径
innodb_log_group_home_dir = /data/mysql_3306/redolog
# redo日志组数量,默认2,建议3
innodb_log_files_in_group = 3
# redo日志大小,默认48M,根据系统繁忙程度,经验值500M
innodb_log_file_size = 500M
# undo log路径
innodb_undo_directory = /data/mysql_3306/undolog/
# 回滚段数量,默认128,建议默认
#innodb_undo_logs = 128
# 创建undo文件数量,默认0,写入undo使用系统表空间,即ibdata1,建议设置多个
innodb_undo_tablespaces = 2
# InnoDB存储引擎在刷脏页时,检测该页所在区,如果有脏页则一起刷,将多个IO写操作合并为一个。对于传统机械硬盘建议使用,而对于固态硬盘可以关闭。默认1,建议1
#innodb_flush_neighbors = 1

# 事务在内存中的缓冲区大小,一般1秒钟写到磁盘1次,默认16M,建议默认
#innodb_log_buffer_size = 16M
# 并发线程数,取值范围0~1000,默认0(表示无并发检查),建议默认值
#innodb_thread_concurrency = 0
# 死锁日志存放到error_log配置的文件里面,默认OFF,建议开启
innodb_print_all_deadlocks = 1

########semi sync replication settings########
# 指定mysql的插件目录,默认basedir/lib
#plugin_dir=/usr/local/mysql/lib/plugin
# 指定载入哪些插件
#plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
# 主库上是否开启semisync
#loose_rpl_semi_sync_master_enabled = 1
# 备库是否开启semisync
#loose_rpl_semi_sync_slave_enabled = 1
# 单位毫秒,master在超时之前没有收到确认,将恢复到异步复制
#loose_rpl_semi_sync_master_timeout = 5000
 
[mysqld-5.7]
#innodb_buffer_pool_dump_pct = 40
# 默认与innodb_buffer_pool_instances相关,建议保持默认
#innodb_page_cleaners = 4
# 是否开启在线回收undo log日志文件,支持动态设置,必须innodb_undo_tablespaces>=2
innodb_undo_log_truncate = 1
# 超过这个阀值,触发truncate动作,truncate后空间缩小到10M,默认是1G,建议默认
#innodb_max_undo_log_size = 1G
# 控制回收undo log的频率,指定purge操作被唤起多少次之后释放rollback segments,默认值128, 建议默认
#innodb_purge_rseg_truncate_frequency = 128
# 控制日志的显示时间,5.7.2 之后默认UTC,导致日志中记录时间有时差,修改为SYSTEM解决问题
log_timestamps=system
# 从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,需设置开启,默认关闭
show_compatibility_56=on

2 安装后设置

# 查看'root'@'localhost'生成的临时密码
cat /data/mysql_3306/log/mysqld.err | grep "A temporary password" | awk -F " " '{print$11}'

# 如果是CentOS 8以上的操作系统,需要创建一下软连接,不然本地使用mysql客户端会报错
ln -s /lib64/libncurses.so.6 /lib64/libncurses.so.5
ln -s /lib64/libtinfo.so.6.1 /lib64/libtinfo.so.5

# 本地登录mysql
mysql -u root -p
-- 根据初始化时的密码登录后,第一时间修改'root'@'localhost' 的密码
alter user 'root'@'localhost' identified by 'New_password';

你可能感兴趣的:(mysql,数据库,dba)