创建用于更新生产数据库的脚本

时间:2019-03-08 17:11:25

标签: mysql database

我正在搜索有关更新生产数据库的最佳实践。 90%的更新正在添加新列,新表,添加缺少的索引。有时,我还需要更新应用程序正常工作所需的数据(更新语句或修改)。我还没有遇到删除操作。

我当前的开发设置是创建一个mysqldump,将其rsync到服务器并将其导入数据库。但是,一旦生产数据库中存在任何用户数据,此方法就无法实现。我已经搜索过,建议的方法是访问the Microsoft website

我正在使用图形编辑器(Sequel Pro)进行更改,因此开箱即用,我没有所有更改的代码。您如何创建包含所有更改的脚本?手动管理所有更改非常容易出错。理想情况下,我将比较2个mysqldumps并生成所有更改的报告。

1 个答案:

答案 0 :(得分:0)

要创建脚本来进行数据库更改,您需要安装一个称为编辑器的工具。以下是一些示例:MySQL Workbench,HeidiSQL,用于MySQL的Toad,用于MySQL的dbForge Studio。对于其他示例,只需在线搜索“ mysql编辑器”。这些工具中有一些是免费使用的,其他则需要付费。他们的目的是使用户能够编写SQL代码,然后对数据库执行该代码。

关于如何创建脚本-您将需要学习如何手动编写SQL语句。这是开发非常有用的技能。一旦知道如何做到这一点,您将对数据库的工作方式有很好的了解,这也很有趣!

这是一个更改脚本的示例,其中包含一些MySQL语句的基本示例,这些示例将执行您在帖子中描述的一些需要做的事情:

/*
filename: 2019-03-09_ScriptExample.sql
purpose:  demonstrate changing a database by using a script
author:   knot22
created:  03/09/2019
updated:  03/09/2019
*/

--create a new table
CREATE TABLE customer
(
  customer_id INT PRIMARY KEY,
  first_name CHAR(35),
  last_name CHAR(35),
  credit_limit DECIMAL(8,2),
  sales_representative_id INT
);

--add some data to table
INSERT INTO customer(customer_id, first_name, last_name, credit_limit, sales_representative_id)
VALUES
(1, 'Charlie', 'Brown', 1000.00, 14),
(2, 'Mickey', 'Mouse', 500.00, 14),
(3, 'Tweety', 'Bird', 750.00, 21);

--add a column to an existing table
ALTER TABLE customer
ADD COLUMN phone_number VARCHAR(15) AFTER last_name;

--update a row to add a customer's phone number
UPDATE customer
SET phone_number = '123-555-0001'
WHERE customer_id = 2;

您还可以运行查询以查看表中的数据。例如-

--query table to have a look at the data in it
SELECT * FROM customer;

以下是指向可能其中一个站点的链接,以帮助您开始编写SQL: http://www.mysqltutorial.org/basic-mysql-tutorial.aspx

可以仅执行脚本的一部分。编写时很有用。在大多数SQL编辑器中,您可以突出显示代码块并单击“执行”,它将仅运行针对数据库突出显示的语句。当整个脚本运行时,SQL语句将按照它们在脚本中的写入顺序执行。如果需要进行多次更改,这通常很重要。

脚本可以另存为带有.sql文件扩展名的文件。可以在SQL编辑器中查看/修改/执行它们,并在文本编辑器中查看/修改它们。我喜欢保存所有更改脚本,因为它们可以记录更改的内容。在脚本中添加有关在Dev,Test,Prod环境中何时执行的注释也很有用。

我用于进行数据库更改的过程如下。首先,在我的开发环境中创建脚本,并在那里进行尝试,直到以预期的方式工作为止。接下来,将Prod数据库还原到我的Test环境中,并在Test中执行脚本。这是Prod中将要发生的情况的模拟。一旦一切正常工作,最后我在Prod中执行脚本。