前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 示例环境

# 示例环境

作者头像
用户1175783
发布2020-05-09 16:17:42
1.2K0
发布2020-05-09 16:17:42
举报

# MySQL安装与配置

​ 第一次接触MySQL?

​ 我该下载哪个版本?

​ 我该使用哪种安装方式?

​ 不同的安装方式有什么不同?

​ 每次安装都要从网上查找安装教程?

​ 不同的系统,不同的包管理方式,如何一次学会在所有系统的上安装MySQL?

​ 想必很多新手都避免不了有这些疑问,都想一次性投入精力解决以上问题,下面我用我理解的方式帮助你解决这些疑问。

# 示例环境

Centos8MySQL 5.7.28

由于MySQL官网还没有放出Centos8的安装包,我这里使用的是Centos7的tar包进行安装,不过我也尝试了Centos7的RPM包安装很顺畅没有任何问题,不过还是推荐最好使用mysql发布的相关平台包进行安装,避免不必要的麻烦。

# 安装方式

  1. 首先,安装MySQL依赖的第三方包
  2. 其次,下载MySQL的安装文件
  3. 然后,配置环境变量
  4. 最后,启动MySQL服务

# 如何使用tar包装出RPM的效果

  1. 首先,安装MySQL依赖的第三方包 在不同系统中mysql依赖的包名可能不尽相同,需要自己试错 # mysqld的依赖包 yum install libaio # 这个包在centos8不需要安装 yum install libnuma # mysql客户端工具需要下面的包 yum install libncurses* 1 2 3 4 5 6
  2. 其次,下载MySQL的安装文件 官网下载地址:versioin 5.7.28 # 首先我们解压mysql到指定的目录中 tar -zxvf data/mysql-5.7.28-el7-x86_64.tar.gz -C /usr/local/ # 重命名目录名称 mv /usr/local/mysql-5.7.28-el7-x86_64 /usr/local/mysql 1 2 3 4 5 现在我们就将mysql安装到了/usr/local/mysql目录中,这也是RPM包中mysql的默认安装位置
  3. 然后,配置环境变量 /root/.bash_profile 在文件的最后添加如下配置文件,你也可以在其它你知道的可以配置环境变量的文件中添加如下配置,我通常喜欢配置在.bash_profile文件中,缺点是只有带你过去用户可用,如果系统中存在多个用户,需要配置在/etc目录中。 # mysql export MYSQL_HOME=/usr/local/mysql PATH=MYSQL_HOME/bin:PATH export PATH 1234让当前bash窗口生效,当然你也可以重新登录用户使配置生效。 # 让环境变量在当前bash窗口立即生效 source /root/.bash_profile # 使用命令验证一下配置效果 mysql --version 12345
  4. 最后,启动MySQL服务 因为我们现在使用的tar包方式安装MySQL,所以没有办法直接使用servie mysql start或者systemctl mysql start的方式启动服务。 不过MySQL已经为我们准备好了服务文件,我们只需要将服务文件移动到对应的目录即可。 cp /usr/local/mysql/mysql.server /etc/init.d/mysql # 此时我们就可以使用下面命令,不过暂时下面的命令会报错,看后面解决 service mysql start #systemctl mysql start 1 2 3

完成以上4步后,就跟RPM包的安装效果一样了。

# 启动MySQL

MySQL 5.7.*的版本中默认/usr/local/mysql中不再自带data目录,而这个data目录是MySQL实例的数据目录,所以我们要先生成这个data目录。

# 多种方式生成data目录
  1. 使用下面的命令,我们使用默认的方式初始化mysql的data目录(不推荐) mysqld --initialize 1
  2. 推荐使用配置文件的方式初始化mysql的data目录,mysql默认会从以下位置加载配置: /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf # 这里指定mysql客户端的默认连接端口 [client] port=3306 # 这里指定mysql服务的数据目录,可以修改 [mysqld] datadir=/mysql/data port = 3306 1 2 3 4 5 6 7 8 同样的命令初始化mysql,但是这次我们使用了my.cnf配置文件,我们将data目录指向了/mysql/data mysqld --initialize 1
  3. 为mysql指定系统账户(仅推荐在生成环境) 上面例子,我们默认使用了当前登录的用户(root)来启动mysql,这通常是不安全的(但是推荐在开发环境中这么做)。下面我们可以使用指定的用户来启mysql服务。 # 创建一个mysq用户组 groupadd mysql # 并添加一个名为mysql的用户,/bin/false限制这个用户不能使用shell方式登录,仅能用来启动数据库 useradd -r -g mysql -s /bin/false mysql # 因为mysql用户的权限小于root,所以我们给mysql加上访问/root/mysql/data目录的权限 chown mysql:mysql /mysql/data chmod 750 /mysql/data ## 指定用户初始化mysql数据目录,还是上面的配置文件,位置放在/usr/local/mysql/my.cnf mysqld --initialize --user=mysql 1 2 3 4 5 6 7 8 9 10 11 通过以上任意一种方式就可以初始化好数据目录了。
# 启动mysql服务
  1. 使用mysqld_safe启动 mysqld_safe --user=mysql 1
  2. 使用service mysql start启动 内部还是使用的mysqld_safe命令 service mysql start 1

# 启动多个mysql实例

在机器有限的环境下我们通常会这么干,而且mysql也支持这样的操作。

如果要运行多个mysql实例首先要生成多个mysql的data目录,每个实例一个data目录,可以通过下面命令这样:

# 实例1
mysqld --defaults-file=/root/mysql/my1.cnf --initialize --user=mysql
# 实例2
mysqld --defaults-file=/root/mysql/my2.cnf --initialize --user=mysql
# 实例3
mysqld --defaults-file=/root/mysql/my3.cnf --initialize --user=mysql

1 2 3 4 5 6

启动多个实例会导致service mysql start命令失效,因为mysqld默认是从固定的几个位置查找my.cnf的,而我的配置文件可能不再这几个默认位置。

所以暂时只能使用mysqld_safe方式来启动mysql服务:

mysqld_safe --defaults-file=/root/mysql/my1.cnf --user=mysql
mysqld_safe --defaults-file=/root/mysql/my2.cnf --user=mysql
mysqld_safe --defaults-file=/root/mysql/my3.cnf --user=mysql

1 2 3

如果你有能力修改/usr/local/mysql/supper-files/mysql.server文件也可以通过复制多分,分别修改对应的数据目录,并移动到/etc/init.d/目录下,如:/etc/init.d/mysql1 /etc/init.d/mysql2 /etc/init.d/mysql3

service mysql1 start
service mysql2 start
service mysql3 start

1 2 3

修该方法也很简单,只要打开/usr/local/mysql/support-files/mysql.server文件找到下面这行:

# 指定实例的datadir目录即可
datadir=

1 2

当然我们还需要在my*.cnf文件中加上下面这句话,因为多个mysql实例不能共用一个socket文件:/tmp/mysql.socket.lock

my*.cnf

# my1.cnf
[mysqld]
socket=/tmp/mysql.socket.lock.1
# my2.cnf
[mysqld]
socket=/tmp/mysql.socket.lock.2
# my3.cnf
[mysqld]
socket=/tmp/mysql.socket.lock.3

1 2 3 4 5 6 7 8 9 10 11

# 启动多个mysql实例的正确做法

我们也看到了上面的方式启动多个mysql实例甚是麻烦,所以mysql提供了mysqld_multi命令来帮助我们解决这个问题,我们不再需要同时定义多个my.cnf文件,只要一个就够了,配置文件如下:

[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
user=multi_admin
# 官方例子中为password,实测无效,估计是不同版本有改动,需要改为pass
pass=123456
log=/mysql/log
[mysqld1]
port=3306
datadir=/mysql/3306/data
# 每个服务都有一个进程,所以需要指定多个socket文件
socket=/mysql/3306/mysql.sock
# 使用root账户启动,如果非root账户,则需要注意文件/目录的权限问题
user=root
[mysqld2]
port=3307
datadir=/mysql/3307/data
socket=/mysql/3307/mysql.sock
user=root
[mysqld3]
port=3308
datadir=/mysql/3308/data
socket=/mysql/3308/mysql.sock
user=root

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

# 启动某个mysql实例

mysqld_multi支持一个配置文件中配置多个服务,服务的分隔方式是mysqld+数字,如下命令我们启动的是mysqld2的配置

mysqld_multi --defaults-file=/root/mysql/my_multi.cnf start 2

1

# 创建mysqladmin账户

如果我们不配置mysqladmin的用户/密码,结果是只能start,不能stop,解决办法就是创建一个新用户,并赋予shutdown权限,当然root用户也可以。

上面我们定义了3个mysql服务,我们需要连接到三个服务分别创建相同的账号和密码。

# 创建用户
CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY '123456';
# 给用户添加shutdown权限
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';

1 2 3 4

# 相关工具

  1. mysql:客户端工具
  2. mysqld:mysql服务
  3. mysqld_safe: mysqld的守护进程,当使用kill -9 mysqld_pid关闭mysqld时,该守护进程会自动重启mysqld
  4. mysqld_multi:管理多个mysqld的工具
  5. mysqladmin:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库等。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # MySQL安装与配置
    • # 示例环境
      • # 安装方式
        • # 如何使用tar包装出RPM的效果
      • # 启动MySQL
        • # 启动多个mysql实例
          • # 启动多个mysql实例的正确做法
            • # 相关工具
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档