模拟真实环境下超简单超详细的 MySQL 5.7 安装
点击蓝字
关注我们
1、MySQL 历史简介
1999年至 2000 年,Monty 成立了MySQL AB 这个公司。 2000 年,MySQL 公布了自己的源代码,并采用了 GPL 许可协议,正式进入开源的世界,这让 MySQL 迅速发展。2005 年 10 月 MySQL 发布了一个里程碑式的版本 MySQL 5.0 。
MySQL 5.0版本加入了很多新特性,包括存储过程、服务器游标、触发器、视图、分布式事务、查询优化器等,5.0 也奠定了高性能数据库的基础。 2008 年 1 月 16 日 Sun 公司用10亿美元收购了 MySQL, 在一年多后的时间里 MySQL 开源数据库又被闭源的 Oracle 公司收购,Oracle 于 2009 年 4 月 20 日以每股 9.5 美元的价格收购Sun,交易总价值约为 74 亿美元。从此,MySQL 变成了 Oracle 旗下的产品。
MySQL在2016年 9 月 12 日发布了 8.0 版本,标志着一个新的里程碑,在 2019 年 2 月 1 日发布了 8.0.15 版本,两年多的时间里又出了 8.0 的十几个版本,如下图所示。
2、MySQL 5.7 下载
今天主要讲解的是 Linux 系统下 MySQL5.7 的安装,8.0 不再本次的范围内。
打开浏览器输入以下网址:
https://dev.mysql.com/downloads/mysql/5.7.html
找到 MySQL Community Server 5.7 点击进入。
选择正确的系统和版本,选择下载,如下图。
这里需要 Oracle SSO 账号登陆才可下载,有账号的登陆就可以直接下载了,没有的也可以去注册,但是下载速度不是很快,这里我已经下载好了 Windows 和 Linux 版本 ,本公众号后台回复【MySQL下载】即可获取,还有超详细的 Windows 下安装教程。
账号登陆之后,第一次需填写如下调查,填写后可直接下载了。
选择保存文件的位置,等待下载。
下载完之后,由于服务器一般都属于内网环境,无法上网,则通过 SFTP 上传至服务器 /opt 目录,然后检验 MD5 值,保证软件下载过程中没有损坏,可正常使用,下图中检验出来的 MD5 值与上图下载中的一致,说明软件可正常使用。
3、MySQL 5.7 安装
3.1 首先安装前要进行环境检测
为了能够很顺利的安装软件,环境检测是必不可少的一项,安装大型数据库 Oracle 时也是需要对操作系统进行检测的,以便能够更好的去安装软件。
(1)需要关闭 SELINUX 和 操作系统防火墙 iptables
设置 selinux 为 disable 并重启操作系统;用 chkconfig iptables off 命令关闭防火墙,如下图所示。
(2)IO调度默认为 cfq 模式,墙裂建议使用 deadline 模式。
使用如下命令查看IO调度是否为 cfq 模式
cat /sys/block/sda/queue/scheduler
在 /etc/grub.conf 文件中添加一行:
elevator=deadline
(3)swap 分区设置
swappiness 的大小直接影响 swap 分区,它有两个极端值 0 和100,0 代表着最大限度地使用物理内存,然后才会使用 swap 分区,这样会导致内存的溢出 OOM 的错误。设置成 100 是积极的使用 swap 分区,把内存上的数据及时搬家到 swap 分区里,这也不推荐。使用如下命令可查看。
[root@rhel67 opt]# cat /proc/sys/vm/swappiness
若此值不是 60 墙裂建议 使用vi /etc/sysctl.conf 文件,加入 vm.swappiness = 60 即可。修改之前建议先备份此文件,然后重启操作系统。
(4)文件系统的选择
这里建议大家使用 xfs 文件系统,相比 ext4 它管理更方便,支持动态扩容,删除文件也很方便。XFS 文件系统是扩展文件系统 (extent file system)的一个扩展。XFS 是64 位高性能日志文件系统。对 XFS 的支持大概在 2002年合并到了 Linux 内核,到了 2009 年,红帽企业版 Linux 5.4 也支持了 XFS 文件系统。对于 64 位文件系统,XFS 支持最大文件系统大小为 8 exbibytes。XFS 文件系统有一些缺陷,例如它不能压缩,删除大量文件时性能低下。目前RHEL 7.0 文件系统默认使用 XFS。
(5)操作系统的限制
资源限制里主要看 open files 和 max user processes 这两个参数,当 open files 设置不合理时,而当前服务器的连接过多或者表过多时,就会有可能出现打不开表或者访问不了表的现象,默认情况下最大的句柄数为 1024 个,表示单个进程最多可以访问 1024 个文件句柄。如果超过默认值就会出现文件句柄超过限制的错误 “ too many open files”.
max user processes 最大会话连接,当操作系统有多个实例时,但发现连接不了,报错为“resource temporarily unaviable”的错误,则表示没有足够的资源。
当出现这样的问题就需要修改系统的软硬资源限制,备份文件后编辑如下文件并重启操作系统。
vi /etc/security/limits.conf
(6)numa 需要关闭
numa 是一种关于多个cpu 如何访问内存的架构模型,现在的 cpu 基本都是numa 架构,Linux 内核2.5 开始支持 numa。numa 架构简单点儿说就是,一个物理 cpu(一般包含多个逻辑 cpu 或者说多个核心)构成一个 node,这个 node 不仅包括cpu,还包括一组内存插槽,也就是说一个物理 cpu 以及一块内存构成了一个 node。
关闭 numa 功能,可以更好的分配内存,不需要采用 swap 的方式来获取内存,有经验的 DBA 知道使用 swap 导致的数据库性能下降有多么的恶心,关闭方法也分在 BIOS、操作系统中关闭,或者是在数据库启动过程中关闭。
numa --interleave=all /usr/local/mysql/bin/mysqld_safe-defaults-file=/etc/my.cnf &
3.2 新建用户和组等
[root@rhel67 ~]# groupadd mysql
[root@rhel67 ~]# useradd-g mysql mysql -s /sbin/nologin
移动软件至 /usr/local 目录,并解压软件。
[root@rhel67 local]# mv/opt/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz /usr/local/
[root@rhel67 local]# tar -zxvfmysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
做一个软链接方便管理与升级,并授权目录
[root@rhel67 local]# ln -smysql-5.7.25-linux-glibc2.12-x86_64 mysql
[root@rhel67 local]# chown -R mysql:mysql mysql
[root@rhel67 local]# chmod -R 775 mysql
3.3 新建数据库目录并授权
[root@rhel67 opt]# mkdir -p /opt/mysql/
[root@rhel67opt]# chown -R mysql:mysql /opt/mysql
3.4 参数编辑
由于是二进制文件安装,数据库参数文件需要自己配置,以下内容可复制,很多参数均是生产环境中实践而来的,后期在说明参数的意义。
vim /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket=/tmp/mysql.sock
[mysql]
prompt="\u@db \R:\m:\s [\d] "
no-auto-rehash
[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir =/opt/mysql
socket= /tmp/mysql.sock
character-set-server = utf8mb4
skip_name_resolve = 1
open_files_limit = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 100000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet =32M
sort_buffer_size =4M
join_buffer_size =4M
thread_cache_size = 768
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
slow_query_log_file = /opt/mysql/slow.log
log-error = /opt/mysql/error.log
long_query_time = 0.5
server-id = 3306100
log-bin =/opt/mysql/mysql-binlog
sync_binlog =1
binlog_cache_size = 4M
max_binlog_cache_size = 128M
max_binlog_size = 1024M
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log_recovery = 1
relay-log-purge =1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops =100
innodb_spin_wait_delay = 30
transaction_isolation =REPEATABLE-READ
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup=1 innodb_buffer_pool_dump_at_shutdown =1
innodb_data_file_path = ibdatal:1G:autoextend #innodb_flush_1og_at_trx_commit =1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
internal_tmp_disk_storage_engine = InnoDB
innodb_stats_on_metadata = 0
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
#performance_schema
performance_schema=1
performance_schema_instrument = '%=on'
#innodb monitor
innodb_monitor_enable = "module_innodb"
innodb_monitor_enable = "module_innodb"
innodb_monitor_enable = "module_server"
innodb_monitor_enable = "module_dml"
innodb_monitor_enable = "module_ddl"
#innodk_monitor_enable = "module_trx"
innodb_monitor_enable = "module_os"
innodk_monitor_enable = "module_purge"
innodb_monitor_enable = "module_log"
innodb_monitor_enable = "module_lock"
innodb_monitor_enable = "module_buffer"
innodb_monitor_enable = "module_index"
innodb_monitor_enable = "module_ibuf_system"
innodb_monitor_enable = "module_buffer_page"
innodb_monitor_enable = "module_adaptive_hash"
[mysqldump]
quick
max_allowed_packet = 32M
[root@rhel67 ~]# chown -R mysql:mysql/usr/local/mysql
[root@rhel67 ~]# chown -R mysql:mysql /opt/mysql
3.5 初始化数据库
使用mysqld 命令初始化数据库
[root@rhel67 ~]# cd /usr/local/mysql/bin
[root@rhel67 bin]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir =/usr/local/mysql --datadir=/opt/mysql --user=mysql --initialize
[root@rhel67 bin]#
初始化后需查看 /opt/mysql/error.log ,无关键错误即可。
注意:若出现如下错误,需要删除 /opt/mysql/ 目录下的内容,重新初始化。
3.6 启动数据库并设置密码
[root@rhel67 bin]# pwd /usr/local/mysql/bin
[root@rhel67bin]#
[root@rhel67 bin]# ./mysqld_safe --defaults-file=/etc/my.cnf &
[1]14163
[root@rhel67 bin]# 2017-10-29T18:11:58.775800Z mysqld_safe Logging to'/opt/mysql/error.log'. 2017-10-29T18:11:58.833798Z mysqld_safe Starting mysqlddaemon with databases from /opt/mysql
当数据库启动成功后,进入数据库的初始化密码会在/opt/mysql/error.log里面,使用下面命令即可查看密码:
cat /opt/mysql/error.log | grep password
找到密码,使用如下命令登陆 MySQL 并设置密码为 root 且永不过期。
./mysql -u root -p set password ='root';
alter user 'root'@'localhost' password expire never;
flush privileges;
3.7 优化连接
每次登陆 MySQL时都要进入到 MySQL 的目录下,有点麻烦,于是编辑 /etc/profile 定义一个别名,直接登录即可。使用命令如下:
vi /etc/profile
aliasmysql='/usr/local/mysql/bin/mysql'
source /etc/profile
如上,MySQL5.7 算是安装完毕,可以正常使用了,这里简单说明一下环境:OS: RHEL6.7 64 bit,之前安装过 Oracle 11.2.0.4,其他基本上没有区别,需要 Windows 版本的 MySQL5.7.25 数据库安装包,本公众号【JiekeXu_IT】后台回复【MySQL下载】即可获取,还有超详细的 Windows 下安装教程和软件,关注本公众号即可获得 Oracle 和 MySQL 数据库入门、进阶、精通视频资料,还有更多视频资料赶快行动吧!
看更多走心好文章
请长按下方图片
识别二维码 关注公众号
参考文章
官方链接:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
《MySQL王者晋级之路》第 2 章 张甦/著
喜欢记得来一个