专栏首页JiekeXu之路模拟真实环境下超简单超详细的 MySQL 5.7 安装

模拟真实环境下超简单超详细的 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 数据库入门、进阶、精通视频资料,还有更多视频资料赶快行动吧!

本文分享自微信公众号 - JiekeXu之路(JiekeXu_IT),作者:JiekeXu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle OCP考试经验总结与心得体会

    本人于2018年10月27日星期六考完Oracle OCP 1Z0-053,周末休息一天,今天简单的说一说我的考试心得吧。

    JiekeXu之路
  • Linux CentOS6.8搭建sftp服务

    最近因公司工作需要用到sftp服务器,参考网上各种方法,但被网上各种方法尤其是权限设置问题搞得晕头转向,现在将自己搭建过程总结了一下,提供给大家希望有所帮助。

    JiekeXu之路
  • 基于Python操作将数据存储到本地文件

    前面说过Python爬取的数据可以存储到文件、关系型数据库、非关系型数据库。前面两篇文章没看的,可快速戳这里查看!《使用Python将数据存入SQLite3数据...

    JiekeXu之路
  • MySQL5.7安装步骤

    本次进行MySQL5.7版本的安装,关于MySQL版本选择、官网下载地址、相关系统配置等操作可以参照之前的博文,本文就不在赘述咯。可以参考历史文章处理,下面直奔...

    July
  • # client配置项

    MySQL配置参数多达数百个,不过常用的并不多,很多配置我们不需要关心,只要掌握一些必要的配置项就能解决99%的问题,当遇见了那1%的问题时mysql可能已经不...

    用户1175783
  • 青铜到王者,看看你的MySQL数据库是什么段位,如何提升?

    作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数...

    数据和云
  • 搞定win下MySQL安装难安装贵问题

    本方案解决了windows下安装MySQL过程繁琐的问题。 是真正的免安装绿色方法,不用配环境变量,不用执行install命令,不用配置my.ini文件。

    震八方紫面昆仑侠
  • MySQL之my.cnf文件常用参数

    MySQL的配置文件,想必大家都不陌生,今天再来说说配置文件中的一些常用配置,并非最合理的配置,仅供参考,只有了解自己的生产环境,才能根据环境找到最适合...

    AsiaYe
  • docker mysql初始化多个sql脚本

    现有一台服务器,需要部署mysql。其中mysql容器,需要在第一次启动时,执行多个sql文件。

    py3study
  • 技术分享 | MariaDB 10.1.9 迁移到 MySQL 5.7.25

    爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查,对数据库有兴趣,对技术有想法。一入 IT 深似海,从此节操是路人。

    爱可生开源社区

扫码关注云+社区

领取腾讯云代金券