扩展 Rails 上的 Ruby:设置专用 MySQL 服务器(第 2 部分)

介绍


每个服务器是多机应用部署堆栈的一部分,应该像一个好的意大利披萨:一个坚实的基础只需要配备必要的成分,而不需要过度膨胀或加载,以便保持一切易于处理(和管理)。

在我们的 Scaling-Rails DigitalOcean文章系列的第二部分中,我们将看到如何创建一个滴滴来托管数据库层,以便应用服务器连接并与之合作。

词典


1、选择数据库


2、服务器配置结构


数据库服务器层 数据库服务器层

将数据库服务器添加到部署设置


准备服务器

4、安装MySQL


  1. 下载数据库服务器
  2. 执行初始设置
  3. 连接到数据库服务器
  4. 创建新数据库
  5. 创建新数据库用户
  6. 授予特权
  7. 启用远程连接

5、配置铁路应用程序


  1. 安装数据库服务器库
  2. 配置 database.yml for Rails
  3. 获取 mysql Gem
  4. 迁移服务器之间的数据

选择一个数据库


Ruby on Rails 应用程序开发框架为数据库服务器提供了广泛的支持,对于大多数应用程序来说,关系式数据库管理系统是正确的选择,但有些可能需要一个非关系式的 NoSQL 数据库服务器,而不是关系式的数据库服务器,或者两者一起运行。

当您在自己的开发计算机上开始使用 Rails 时,最简单和最有逻辑的方式是开始使用可行的但基本的数据库实现,例如 SQLite 库。

根据您的需求和应用程序类型,您需要决定使用数据库管理系统(即数据库服务器)来创建应用程序部署设置的 _database layer。

对于关系数据库,一些更受欢迎的选择是:

  • MySQL 和衍生品:

最流行的、最常用的 RDBMS 和相关的,的项目。

    • PostgreSQL: ( )

最先进的、符合 SQL 的和开源的目标-RDBMS。

** 对于非关系数据库服务器:**

  • ** 根据列:**

卡桑德拉、HBase等。

  • ** 文件:**

MongoDB、Couchbase 等。

  • 图表: ( )

OrientDB、Neo4J等。

为了在继续部署数据库服务器之前做出明确和长期的决定,您可能感兴趣阅读我们的文章:

  • ** 数据库介绍:**

理解 SQL 和 NoSQL 数据库以及不同的数据库模型

  • 相對性:

比较关系数据库管理系统

    • NoSQL:**

对比 NoSQL 数据库管理系统和模型

服务器设置结构


在我们开始构建 database layer 之前,让我们看看我们的最终部署设置会是什么样子。

加载均衡多种应用服务器


以前,在创建一个负载平衡器 / 反向代理程序与多个应用程序服务器后,这是我们最终所拥有的:

 1Three droplets with each having a distinct role:
 2------------------------------------------------
 31 x Load-Balancer / Reverse-Proxy
 42 x Application Servers Running Your Rails Web-Application / API
 5
 6                             ---
 7
 8                    DEPLOYMENT STRUCTURE
 9
10             +-------------------------------+
11             |                               |
12             | LOAD-BALANCER / REVERSE PROXY |
13             |                               |
14             +-------------------------------+
15                             +
16                             |
17                             |
18        +---------------+    |    +---------------+
19        |  APP SERVER  |    |    |  APP SERVER  |
20        |---------------|    |    |---------------|
21        |               |    |    |               |
22        |     RAILS     |<---+--->|     RAILS     |
23        |               |         |               |
24        +---------------+         +---------------+

数据库服务器层


为了有一个中央可访问的数据库服务器(例如 RDBMS 和/或 NoSQL 数据库),我们将为我们的服务器设置添加第四个元素:

 1Four droplets:
 2------------------------------------------------
 31 x Load-Balancer / Reverse-Proxy
 42 x Application Servers Running Your Rails Web-Application / API
 51 x Database Server (e.g. MySQL, PostgreSQL, MongoDB etc.)
 6
 7             +-------------------------------+
 8             |                               |
 9             | LOAD-BALANCER / REVERSE PROXY |
10             |                               |
11             +-------------------------------+
12                             +
13                             |
14                             |
15        +---------------+    |    +---------------+
16        |  APP SERVER  |    |    |  APP SERVER  |
17        |---------------|    |    |---------------|
18        |               |    |    |               |
19        |     RAILS     |<---+--->|     RAILS     |
20        |               |         |               |
21        +---------------+         +---------------+
22                +                         +
23                |                         |
24                |  +-------------------+  |
25                |  |  DATABASE SERVER  |  |
26                |  |-------------------|  |
27                |  |                   |  |
28                |  |       MySQL,      |  |
29                +->|     PostgreSQL,   |<-+
30                   |        etc.       |
31                   |                   |
32                   +-------------------+

将数据库服务器添加到部署设置


在本文中,为示范目的,我们将创建和配置MySQL数据库。

让我们开始吧!

准备服务器


**注:**本部分是我们Scaling-Rails(https://link_to_scaling_rails)教程的服务器准备部分的摘要,它解释了如何开始使用CentOS VPS。如果您想在Ubuntu机器上部署MySQL实例,请参阅Deploying Sinatra教程,了解如何准备Ubuntu服务器,然后继续安装MySQL或任何其他数据库服务器。

运行以下命令来更新基于 CentOS 的虚拟服务器的默认工具:

1yum -y update

通过执行以下命令安装包含多个开发工具的应用程序包:

1yum groupinstall -y 'development tools'

添加用于 YUM 包管理器的 EPEL 软件存储库。

1# Enable EPEL Repository
2sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
3
4# Update everything, once more.
5yum -y update

安装一些附加图书馆:

1yum install -y curl-devel nano sqlite-devel libyaml-devel

安装 MySQL


下载数据库服务器


要安装 MySQL,请执行以下命令:

1yum install mysql-server mysql-devel

启动 MySQL 服务器 DAEMON:

1service mysqld start

注: 如果您正在使用Ubuntu,而不是mysql-devel,您需要在您的应用程序服务器上安装mysql-clientlibmysqlclient-dev套件,使用aptitude(或apt-get)以便能够使用MySQL。

执行初始设置


运行以下命令来启动初始的MySQL设置过程:

1/usr/bin/mysql_secure_installation

一旦您运行上述命令,您将看到一个类似于下面的欢迎屏幕:

1NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
2      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
3
4In order to log into MySQL to secure it, we'll need the current
5password for the root user. If you've just installed MySQL, and
6you haven't set the root password yet, the password will be blank,
7so you should just press enter here.
8
9Enter current password for root (enter for none):

除非您已经创建了使用:

1/usr/bin/mysqladmin -u root password 'new-password'
2/usr/bin/mysqladmin -u root -h myt password 'new-password'

按 Enter 按下命令,然后继续下一步,以类似的方式回答问题:

1# Set root password?                     --> Y
2# Remove anonymous users?                --> Y
3# Disallow root login remotely?          --> Y
4# Remove test database and access to it? --> Y
5# Reload privilege tables now?           --> Y

连接到数据库服务器


使用 MySQL 客户端连接到数据库:

1mysql -u root -p

输入您在上一步设置的 root 密码:

1# Enter password:
2# ..
3# .
4mysql>

创建新数据库


让我们从为我们的 Rails 应用程序创建默认数据库开始。

运行以下命令来创建一个新的MySQL数据库:

1# Usage: create database [database_name];
2# Example:
3create database rails_myapp;

创建新数据库用户


出于安全原因,现在让我们为 Rails 应用程序创建一个可以使用的数据库用户,该应用程序将有远程访问。

添加具有本地和远程访问的新用户:

1# Usage:
2# CREATE USER '[user name]'@'localhost' IDENTIFIED BY '[password]';
3# CREATE USER '[user name]'@'%' IDENTIFIED BY '[password]'; 
4# Example:
5CREATE USER 'rails_myapp_user'@'localhost' IDENTIFIED BY 'pwd';
6CREATE USER 'rails_myapp_user'@'%' IDENTIFIED BY 'pwd';

若要验证用户已创建,请执行以下操作:

 1SELECT User,host FROM mysql.user;
 2
 3# Example:
 4# +------------------+-----------+
 5# | User             | host      |
 6# +------------------+-----------+
 7# | rails_myapp_user | %         |
 8# | root             | 127.0.0.1 |
 9# | rails_myapp_user | localhost |
10# | root             | localhost |
11# +------------------+-----------+

授予特权


运行以下命令,向特定用户授予权限:

1# Usage:
2# GRANT ALL ON [database name].* TO '[user name]'@'localhost';
3# GRANT ALL ON [database name].* TO '[user name]'@'%';
4# Example:
5GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'localhost';
6GRANT ALL ON rails_myapp.* TO 'rails_myapp_user'@'%';

flush 特权:

1FLUSH PRIVILEGES;

** 注意:** 要根据您的需求优化权限,请参阅有关主题的官方 MySQL 文档: MySQL 提供的权限

客户存在:

1exit
2# Bye

允许远程连接


由于我们需要 MySQL 服务器才能从运行 Rails 应用程序的远程计算机访问,因此必须修改配置文件。

运行以下命令以使用nano文本编辑器编辑MySQL配置my.cnf:

1nano /etc/my.cnf

我们希望告诉MySQL从分配给我们的滴滴的IP地址倾听连接,所以让我们添加下面的行:

1bind-address   =  0.0.0.0

[mysqld]区块的末尾:

1[mysqld]
2..
3.
4bind-address   =  0.0.0.0

保存和退出,按 CTRL + X 并用 Y 确认。

使用以下命令重新启动 MySQL Daemon:

1service mysqld restart
2
3# Stopping mysqld:                               [  OK  ]
4# Starting mysqld:                               [  OK  ]

配置铁路应用程序


在本节中,我们将修改 Rails 应用程序服务器,以便它们开始与我们刚刚设置的数据库服务器工作。

安装数据库服务器库


首先要做的是安装必要的数据库库,在我们的情况下,这是MySQL的开发包。

运行以下操作来安装 MySQL 开发包 mysql-devel:

1yum install -y mysql-devel

設定「database.yml」為 Rails


Rails 应用程序的数据库设置保存在 /config 目录中的 database.yml 文件中。

运行以下命令以使用nano文本编辑器编辑database.yml文件:

1# Make sure to enter your application deployment directory
2# Example:
3# cd /var/www/my_app
4
5nano config/database.yml

一旦打开此文件,您将看到数据库设置,分为环境名称. 由于应用程序需要使用生产环境运行,让我们为此编辑配置。

用以下代码代替制作:``YML代码块,更改必要的位数以适应自己的设置配置,例如 IP 地址等。

 1# Example:
 2# production:
 3#   adapter: mysql
 4#   encoding: utf8
 5#   database: [database name]
 6#   username: [user name]
 7#   password: [password]
 8#   host: [server IP address]
 9#   port: [port number]
10#   protocol: [protocol]
11#   pool: [connection pool]
12
13production:
14  adapter: mysql
15  encoding: utf8
16  database: rails_myapp
17  username: rails_myapp_user
18  password: pwd
19  host: 128.199.233.36
20  port: 3306
21  pool: 10

** 注意:** 如上面的示例所示,您可能需要指定协议。

** 注意: ** 参数包含可用的最大同时数据库连接插槽数(即池)。

保存和退出,按 CTRL + X 并用 Y 确认。

获取mysql宝石


使用 nano 开始编辑 Gemfile,使用以下方法:

1nano Gemfile

将以下行添加到文件中:

1gem 'mysql'

保存和退出,按 CTRL + X 并用 Y 确认。

使用bundle安装新宝石:

1bundle install

从现在开始,您的 Rails 应用程序服务器将使用您的全新数据库服务器进行所有操作。

服务器之间的数据迁移


如果您已经在开发机器上有数据,您想将其迁移到VPS,请参阅DigitalOcean社区文章: 如何在两个服务器之间迁移MySQL数据库

Submitted by: O.S. Tezer
Published At
Categories with 技术
comments powered by Disqus