1、下载mysql5.7二进制安装包

wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

如:mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

2、安装mysql5.7(安装在/mnt/mysql5.7)

(1)、创建mysql用户账号

useradd -s /sbin/nologin -M mysql
-s表示指定用户所用的shell,此处为/sbin/nologin`,表示不登录。
-M表示不创建用户主目录。

(2)、解压压缩包

tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /mnt/

(3)、重命名

mv mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz mysql5.7

(4)、初始化数据库

./mysqld --initialize --user=mysql --basedir=/mnt/mysql5.7 --datadir=/mnt/mysql5.7/data

–basedir mysql基础目录

–datadir mysql数据存放目录

这里会生成mysql第一次登录用的临时密码,保存下来

2019-08-19T07:38:55.454016Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-08-19T07:38:56.239437Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-08-19T07:38:56.488947Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-08-19T07:38:56.676535Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 66a6e1a3-c254-11e9-baaf-fa163e822434.
2019-08-19T07:38:56.719515Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-08-19T07:38:56.755591Z 1 [Note] A temporary password is generated for root@localhost: #h;U=u212ehu*C11

[root@host-192-100-36-201 bin]# ./mysqld --initialize --user=mysql --basedir=/mnt/mysql5.7 --datadir=/mnt/mysql5.7/data
2019-08-20T03:29:38.927493Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-08-20T03:29:39.674122Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-08-20T03:29:39.923523Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-08-20T03:29:40.088501Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: be3e69e4-c2fa-11e9-bcde-fa163ea7f8aa.
2019-08-20T03:29:40.129214Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-08-20T03:29:40.172426Z 1 [Note] A temporary password is generated for root@localhost: deC4pXo22+7;lb

创建日志文件夹

mkdir -p /mnt/mysql5.7/log
 touch /mnt/mysql5.7/log/error.log
 chown -R mysql:mysql /mnt/mysql5.7/log
 
 mkdir /mnt/mysql5.7/tmp
 chown -R mysql:mysql /mnt/mysql5.7/tmp
 
 mkdir /mnt/mysql5.7/log/binlog/
 chown -R mysql:mysql /mnt/mysql5.7/log/binlog/
 
 mkdir -p /mnt/mysql5.7/log/redo
 chown -R mysql:mysql /mnt/mysql5.7/log/redo
 
 mkdir -p /mnt/mysql5.7/log/relay/
 touch /mnt/mysql5.7/log/relay/relay.index
 chown -R mysql:mysql /mnt/mysql5.7/log/relay

修改配置文件

[client]
port = 3306
socket = /mnt/mysql5.7/tmp/mysql.sock
default-character-set = utf8mb4
[mysqld]

################################## Basic ##################################
port = 3306 #端口
socket = /mnt/mysql5.7/tmp/mysql.sock
basedir = /mnt/mysql5.7/ #基础目录
datadir = /mnt/mysql5.7/data #数据目录
pid-file = /mnt/mysql5.7/tmp/mysql.pid
user = mysql #用户
tmpdir = /mnt/mysql5.7/tmp #临时目录
character_set_server = utf8mb4 #服务端编码
default-storage-engine = InnoDB #默认存储引擎
explicit_defaults_for_timestamp = 1
lower_case_table_names = 1 #大小写敏感
skip-external-locking #是否跳过外部锁
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
plugin_dir = /mnt/mysql5.7/lib/plugin # 插件地址

############################## Connection/File/Table ############################
# 交互式连接超时时间,默认28800 = 八小时
interactive_timeout = 1800
# 非交互式连接超时时间,默认28800 = 八小时
wait_timeout = 1800
lock_wait_timeout = 1800
# 禁用DNS反解析
skip_name_resolve
#MySQL允许最大的进程连接数,默认值151
max_connections = 2000
# 每个数据库用户的最大连接,(同一个账号能够同时连接到mysql服务的最大连接数),默认为0,表示不限制。
max_user_connections = 256
#设置每个主机的连接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host的连接请求,直到mysql服务器重启或通过flush hosts命令清空此host的相关信息。默认100
max_connect_errors = 20000
# back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。默认50
# 也就是说,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log.
back_log = 600
# mysqld能打开文件的最大个数,默认最小1024,如果出现too mant open files之类的就需要增大该值。
open_files_limit = 8192
# 所有SQL线程可以打开表缓存的数量,缓存ibd/MYI/MYD文件。 打开的表(session级别)是每个线程,每个表使用。
table_open_cache = 4096
# 表定义缓存区,缓存frm文件。表定义(global)是全局的,可以被所有连接有效的共享。
table_definition_cache = 4096
# 对table cache 能拆成的分区数,用于减少锁竞争,最大值64.
table_open_cache_instances = 64

################################ Session Buffer Cache ################################
#在MyISAM引擎优化中,这个参数也是一个重要的优化参数。
query_cache_size = 64M
# 用于控制缓存的类型和开关,0:禁用 1:将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。2:则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。
query_cache_type = 2
# 单挑查询最大的缓存大小,超过这个大小的查询不会被缓存
query_cache_limit = 4M
#设置在网络传输中一次消息传输量的最大值。系统默认值 为4MB,最大值是1GB,必须设置1024的倍数。
max_allowed_packet = 64M
# MySql读入缓冲区大小。默认128K
read_buffer_size = 16M
# MySql的随机读(查询操作)缓冲区大小。
read_rnd_buffer_size = 16M
# sort_buffer_size 是一个connection级参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。
sort_buffer_size = 16M
# tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。如果超过该值,则会将临时表写入磁盘。
tmp_table_size = 64M
#用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
join_buffer_size = 32M
# 服务器线程缓,默认38
thread_cache_size = 64
#设置MYSQL每个线程的堆栈大小。可设置范围为128K至4GB,默认为256KB
thread_stack = 256K

################################## Logfile ##################################
#错误日志
log-error = /mnt/mysql5.7/log/error.log
#开启慢查询
slow_query_log = ON
#慢查询日志
slow_query_log_file = /mnt/mysql5.7/log/slow.log
# 开启记录没有使用索引查询语句
log_queries_not_using_indexes = 1
# 记录超时的管理操作SQL到慢查询日志
log_slow_admin_statements = 1
# 在从服务器上开启慢查询日志
log_slow_slave_statements = 1
# 限制每分钟内,在慢查询日志中,去记录没有使用索引的SQL语句的次数
log_throttle_queries_not_using_indexes = 10
# 扫描记录少于改值的SQL不记录到慢查询日志
min_examined_row_limit = 100
log-bin-trust-function-creators = 1
# 慢查询阈值时间,单位秒
long_query_time = 10

################################## InnoDB ##################################
# 缓存innodb表的索引,数据,插入数据时的缓冲总大小。是innodb最重要的一个配置。可设置的总内存的50%-80%。
innodb_buffer_pool_size = 6G
# InnoDB 缓冲池划分的区域数量。通过在不同线程读取和写入缓存页面时减少争用,将缓冲池划分为不同的实例可以提高并发性,如果innodb_buffer_pool_size > 1G .则默认为8,否则为1。取默认值即可。或可考虑根据cpu核数进行设置。
innodb_buffer_pool_instances = 8
innodb_online_alter_log_max_size = 1024M
#同一时刻能够进入innodb层次并发执行的线程数,最好不要超过cpu核数太多,比如1.5倍cpu核数,一般等于cpu核数即可。建议用默认设置,一般为8.
innodb_thread_concurrency = 8
# 磁盘io的吞吐量,默认值是200.对于刷新到磁盘页的数量,会按照inodb_io_capacity的百分比来进行控制。
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_sort_buffer_size = 64M
innodb_page_size = 16K
# 同时打开的表的最大数,默认为2000,与性能影响不大。崩溃恢复时数越大,恢复越快。
innodb_open_files = 4096
# 如果将此参数设置为1,将在每次提交事务后将日志写入磁盘。为提供性能,可以设置为0或2,但要承担在发生故障时丢失数据的风险。设置为0表示事务日志写入日志文件,而日志文件每秒刷新到磁盘一次。设置为2表示事务日志将在提交时写入日志,但日志文件每次刷新到磁盘一次。
innodb_flush_log_at_trx_commit = 2
# 后台服务的读写io线程数,根据cpu核数进行设置,cpu总线程数=read+write 这样会比较好发挥多核cpu的性能。默认都是4
innodb_read_io_threads = 8
innodb_write_io_threads = 8
# 专门用于InnoDB 清除操作的后台线程的数量 。默认值和最小值1表示清除操作总是由后台线程执行,而不是主线程的一部分 。 在一个或多个后台线程中运行清除操作有助于减少内部争用 InnoDB,提高可伸缩性。将该值增加到大于1会创建多个单独的清除线程,这可以提高在多个表上执行DML操作的系统的效率 。最大值是32。
innodb_purge_threads = 4
innodb_max_dirty_pages_pct = 80
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
# InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。但是,如果结合InnoDB使用MyISAM的lock tables语句或第三方事务引擎,则InnoDB无法识别死锁。为消除这种可能性,可以将innodb_lock_wait_timeout设置为一个整数值,指示MySQL在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数)。
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_lru_scan_depth = 4096
# Fdatasync,如果为空,默认使用此选项,会将io操作保存再系统缓存中,带一定数量后一次刷新
# O_DSYNC,使用系统缓存,但是必须要io操作刷新到磁盘后,才会返回io操作成功。
# O_DIRECT,不使用系统缓存,直接进行io操作,刷新到磁盘。
# 默认为空
innodb_flush_method = O_DIRECT
# 独立表空间,默认是打开的
innodb_file_per_table = 1

################################## Replication ##################################
# 服务ID号
server-id = 101
# 将主从信息存放在表中, 注意:不要手动去修改表中数据。需要修改时用命令行修改change
master_info_repository = TABLE
relay_log_info_repository = TABLE
# GTID即全局事务ID(global transaction identifier),GTID由UUID+TID组成的。
# UUID是一个MySQL实例的唯一标识,TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。
# GTID能够保证每个MySQL实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。
gtid_mode = ON
enforce_gtid_consistency = ON
# 主从同步的重要配置
log_slave_updates = 1
# 同步日志 relay0-log
relay_log = /mnt/mysql5.7/log/relay/relay.log
# 从库从relay-log中执行同步运行的的sql,是否写入bin-log日志,默认为0,不写入,这会导致从库无法作为主库,实现A->B-C的同步。
# 需要多级同步时,推荐开启
relay_log_recovery = 1
# 当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。
sync_relay_log = 0
# 这个参数和sync_relay_log参数一样,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,
# 然后刷入relay-log.info里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。
# 当设置为0时,并不是马上就刷入relay-log.info里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。
# 这个值默认是0,可动态修改,建议采用默认值。
sync_relay_log_info = 0
# 是否自动清空不再需要中继日志时。默认值为1(启用)
relay_log_purge =1
# 跳过指定错误
slave_skip_errors = ddl_exist_errors
# 从库无主键查询算法
slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'

################################## Binlog ##################################
# 日志格式与路径
log-bin = /mnt/mysql5.7/log/binlog/mysql-bin
log-bin-index = /mnt/mysql5.7/log/binlog/mysql-bin.index
binlog_format = row
# binlog日志过期时间
expire_logs_days = 7
# 控制mysql怎么刷新二进制日志到磁盘,默认是0,意味着mysql并不刷新,由操作系统自己决定什么时候刷新缓存到磁盘进行持久化,这时候的性能是最好的,但是风险也是最大的
sync_binlog = 1
# bin-log日志缓存的大小。
binlog_cache_size = 8M
# binlog 能够使用的最大cache 内存大小
max_binlog_cache_size = 2048M
# 最大的binlog日志大小,如果二进制日志写入的内容超出给定值,日志就会发生滚动。
max_binlog_size = 1024M
#记录执行sql语句
binlog_rows_query_log_events = ON

################################## Redo/Undo ##################################-
#日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能。
innodb_log_buffer_size = 16M
# 重做日志大小,用于mysql崩溃等的重做恢复等,小日志文件使写入速度更慢,崩溃恢复速度,更快,大日志文件使写入更快,崩溃恢复速度更慢,对于较稳定的数据库服务来说,如果有高可用,有备份,对于数据恢复要求不高的,可以适当增大日志文件大小,提升性能。mysql5.6 以上版本,最大上限为512G。以前版本最大上限为4G
innodb_log_file_size = 1024M
#为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3M
innodb_log_files_in_group = 3
# 在事务被提交并写入到表空间磁盘文件上之前,事务数据存储在InnoDB的redo日志文件里。这些日志位于innodb_log_group_home_dir变量定义的目录中
innodb_log_group_home_dir = /mnt/mysql5.7/log/redo

[mysqldump]
quick
single-transaction

(*二进制安装,默认配置文件在/etc/my.cnf)

3、配置并启动mysql

cp /mnt/mysql5.7/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld

(*注意,mysql二进制安装默认的路径为/usr/local/mysql,启动脚本里/usr/local/mysql需要替换)

sed -i 's#/usr/local/mysql#/mnt/mysql5.7#g' /mnt/mysql5.7/bin/mysqld_safe /etc/init.d/mysqld

启动mysql

service mysqld start

4、添加自启动

chkconfig --add mysqld
chkconfig mysqld on
chkconfig --list mysqld

5、配置环境变量

echo 'export PATH=/mnt/mysql5.7/bin:$PATH' >> /etc/profile
source /etc/profile

6、修改mysql密码

set pawword = password("123456")