MySQL 目前的最新版本是 5.7.11,在 Linux 下提供特定发行版安装包(如 .rpm)以及二进制通用版安装包(.tar.gz)。一般情况下,很多项目都倾向于采用二进制通用安装包形式来进行安装配置,自定义非常方便。但在安装过程中发现,其实官方提供的安装说明文件太过简单,而且里面的参数还有问题,依照执行后,mysql 服务启动报错,查找了一些资料并反复试验后,自己总结出一套切实可行的安装配置流程,具体如下:

1、下载 MySQL for Linux Generic 二进制版本安装包(.tar.gz),这里以 5.7.11 版本为例。

2、我一般习惯于将 MySQL 安装到 /opt 目录下,所以我将 MySQL 安装包文件复制到 /opt 目录下,切换为 root 账号后执行以下命令:

# tar -zxvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz
# ln -s mysql-5.7.11-linux-glibc2.5-x86_64 mysql
# cd mysql

建立一个 mysql 的软连接,是为了以后方便配置与操作。

3、5.7.11 版本的通用二进制安装包经解压后得到的 MySQL 目录,内部并未包含数据文件存放的目录,所以需要单独再创建一个子目录用于存放数据文件,比如取名为 data,在第二步命令后(确保在 /opt/mysql 目录下),继续执行如下命令:

# groupadd mysql
# useradd -r -g mysql -s /bin/false mysql
# mkdir data
# chown -R root:root .
# bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
# bin/mysql_ssl_rsa_setup --datadir=/opt/mysql/data

这里特别说明一下,根据官方文档说法,从 5.7.6 版本开始,MySQL 初始化使用 mysqld --initialize 命令,不再使用 mysql_install_db 命令了。但是官方文档给出的 mysqld --initialize 命令并没有给出 --basedir 以及 --datadir 参数,因为它默认使用 /etc/my.cnf 配置文件。有些 Linux 发行版在安装过程中可能会默认生成这个 mysql 配置文件并保存在 /etc 目录下,而默认配置文件中的 basedir、datadir 是被注释的,没有实际内容,这样 mysqld 实际上还是不知道当前的 basedir、datadir 具体是哪个目录。所以这里就通过命令行参数指定我们的自定义目录。包括 mysql_ssl_rsa_setup 命令也要指定 datadir 目录,因为数据库需要的密钥文件也都和数据文件保存在一起,都位于 datadir 目录内。

4、上述工作完成后,先不慌启动数据库服务,这时还要创建 MySQL 服务的配置文件 my.cnf。这个文件可以从 /opt/mysql/support-files 子目录下找到一个叫 my-default.cnf 的配置样例文件,然后复制一个出来,改名为 my.cnf 并放到 /opt/mysql 下即可。根据 MySQL 的规则,它的配置文件必须以 my.cnf 命名,读取的顺序是先尝试读取 /etc/my.cnf,如果不存在则再读取 basedir 目录下的 my.cnf,如果系统环境变量没有 basedir,则尝试读取服务启动所在当前目录下的 my.cnf,这里就是 /opt/mysql/my.cnf 这种情况,如果还是不存在,则读取当前用户家目录下的 .mysql/my.cnf(需要看官方文档确认一下,记不清了)。所以,我们这里只需保证在 /opt/mysql 下有一个 my.cnf,修改其中的内容为如下:

basedir = /opt/mysql
datadir = /opt/mysql/data
log-error = /var/log/mysql-error.log

其余的不变。根据官方文档,log-error 用来指定服务启动后的运行信息日志文件路径,运行信息包括 Notice、Error 等类型的日志。

5、配置文件修改保存好后,就可以启动服务了,确保当前目录为 /opt/mysql,然后运行以下命令:

# bin/msyqld_safe --user=mysql &

这时服务就可以正常启动了。你还可以通过命令 netstat -na -t 查看 MySQL 服务的端口 3306 是否已经处在监听状态,如果是,则表示服务启动正常。当然,你也可以查看日志文件的内容来确定,我们这里因为在已在配置文件中指定日志文件为 /var/log/mysql-error.log,所以查看该文件即可。

6、在本机登录 MySQL 服务,从 5.7.10 版本开始不允许 root 空密码登录了。其实在执行 mysqld --initialize 后系统就会为 root 生成一个初始化密码,并在屏幕标准输出时显示出来,这个要记住!用这个密码第一次登录后,才能再修改密码,这里假定系统生成的初始化密码为 xxxxxx,命令如下:

# bin/mysql --user=root --password=xxxxxx

这样就可以登录 MySQL 服务器了。

7、登录以后,系统要求必须修改 root 账号的密码,MySQL 命令如下:

mysql> set password=password('1234');

这样就可以把 root 账号改为 1234 了。

8、在 Linux 下为了安全,默认是不允许 MySQL 服务器本机以外的机器访问 MySQL 数据库服务的,因此需要重新授权 root 账号。方便其他机器远程访问 MySQL 服务器,MySQL 命令如下:

mysql> grant all privileges on *.* to root@'%' identified by '1234';
mysql> flush privileges;

这样就可以允许从其他机器用 root 账号远程登录 MySQL 服务器了,可以用下面的 MySQL 命令来验证一下:

mysql> use mysql;
mysql> select host,user from user;
+-----------+-----------+
| host | user |
+-----------+-----------+
| % | root |
| localhost | mysql.sys |
| localhost | root |
+-----------+-----------+
3 rows in set (0.00 sec)

证明系统表 user 中已经增加了一条关于 root 远程登录的记录。

9、补充一下如何停止 mysql 服务的命令:

# mysqladmin --user=root --password shutdown

这里 root 是 mysql 数据库的 root,并不是操作系统的账号,这点不要搞混了,该命令会提示输入 mysql root 的密码,正确的话就会停止 mysql 服务了。  

在 CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本的更多相关文章

  1. [转]Windows中使用命令行方式编译打包Android项目

    http://my.oschina.net/liux/blog/37875 网上很多用Ant来编译打包Android应用的文章,毕竟Ant是纯Java语言编写的,具有很好的跨平台性.今天想写个纯win ...

  2. Racket 命令行方式安装 collection

    最近在学习 SICP,里面用的 Lisp 系列的 Scheme.OS X 上要配置Scheme环境. Racket 完整的包要 110 M,mini 版只要10M.我只需要简单的命令行操作,显然选mi ...

  3. CentOS 6.5通过yum的方式安装MySql

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  4. 使用KVM的命令行方式安装centos7虚拟机

    前提条件 1.宿主机上已经安装KVM软件,参考网址:https://www.cnblogs.com/sanduzxcvbnm/p/15538881.html 2.已经上传centos7镜像到宿主机里 ...

  5. 用户命令行方式连MYSQL数据库

    现在是手工入门,就不太依赖IDE,使用MYSQL的JDBC的JAR包连数据库的方式如下: 演示文件内容: package cc.openhome; import java.sql.*; public ...

  6. 命令行方式安装Pycharm

    sudo apt install snapd snapd-xdg-open snap refresh sudo snap install pycharm-professional --classic

  7. Cocos2d-x项目编译为Android应用——命令行方式

    配置: 相关工具:Cocos2d-x 3.2 + Ant 1.9.4 + Android NDK r9d + Android SDK 运行平台:OS X 10.9.4+ Xcode 6 前言:笔者使用 ...

  8. linux 中解析命令行参数(getopt_long用法)

    linux 中解析命令行参数(getopt_long用法) http://www.educity.cn/linux/518242.html 详细解析命令行的getopt_long()函数 http:/ ...

  9. Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...

随机推荐

  1. 为什么选择Redis

    1)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储.    2)Redis支持master-slave(主-从)模式应用    3)Redi ...

  2. 千万不要错过这几道Python面试题,Python面试题No16

    第1题: python下多线程的限制以及多进程中传递参数的方式? python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并不是python的特性, ...

  3. CodeForces:#448 div2 a Pizza Separation

    传送门:http://codeforces.com/contest/895/problem/A A. Pizza Separation time limit per test1 second memo ...

  4. requests中文页面乱码解决方案【转】

    requests中文页面乱码解决方案!   请给作者点赞 --> 原文链接 Python中文乱码,是一个很大的坑,自己不知道在这里遇到多少问题了.还好通过自己不断的总结,现在遇到乱码的情况越来越 ...

  5. xgboost原理总结和代码展示

    关于xgboost的学习推荐两篇博客,每篇看2遍,我都能看懂,你肯定没问题 两篇方法互通,知识点互补!记录下来,方便以后查看 第一篇:作者:milter链接:https://www.jianshu.c ...

  6. 设计模式之第0章-单例模式(Java实现)

    设计模式之第0章-单例模式(Java实现) 当当当当~首先有请最简单的单例模式登场,先来个自我介绍吧 单例模式之自我介绍 我,单例模式(Singleton Pattern)是一个比较简单的模式,我的定 ...

  7. spaCy 并行分词

    spaCy 并行分词 在使用spacy的时候,感觉比nltk慢了许多,一直在寻找并行化的方案,好在找到了,下面给出spaCy并行化的分词方法使用示例: import spacy nlp = spacy ...

  8. springcloud 高可用分布式配置中心

    SpringCloud教程七:高可用的分布式配置中心(SpringCloud Config) 当服务有很多 都要从服务中心获取配置时 这是可以将服务中心分布式处理 是系统具备在集群下的大数据处理 主要 ...

  9. [oldboy-django][2深入django]xss攻击 + csrf

    1 xss攻击 xss攻击(跨站脚本攻击,用户页面提交数据来盗取cookie) - 慎用safe, 和mark_safe -- 如果要用,必须要过滤 - 定义: 用户提交内容,在页面展示用html显示 ...

  10. 欧拉路&&欧拉回路 概念及其练习

    欧拉路: 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路: 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路. 存在欧拉回路的 ...