Я ищу лучшие практики по обновлению производственной базы данных. 90% обновлений - это добавление новых столбцов, новых таблиц, добавление отсутствующих индексов. Иногда мне также необходимо обновить данные, необходимые для работы приложения (обновить операторы или изменить). Я еще не сталкивался с удалением.
Моя текущая настройка разработки - создать mysqldump, rsync его на сервер и импортировать в базу данных. Однако этот подход не работает, если в производственной базе данных есть какие-либо пользовательские данные. Я искал SO, и предлагаемый подход заключается в том, чтобы записать любое изменение, которое вы вносите в базу данных
Я использую графический редактор (Sequel Pro), чтобы вносить изменения из коробки, у меня нет кода для всех изменений. Как вы создаете записи, которые содержат все изменения? Управление всеми изменениями вручную очень подвержено ошибкам. В идеале я бы сравнил 2 mysqldumps и сгенерировал бы отчет обо всех изменениях.
Чтобы создать сценарии для внесения изменений в базу данных, вам необходимо установить инструмент под названием редактор. Вот несколько примеров: MySQL Workbench, HeidiSQL, Toad для MySQL, dbForge Studio для MySQL. Для других примеров, просто сделайте онлайн-поиск "mysql editor". Некоторые из этих инструментов бесплатны, другие имеют свою стоимость. Их цель - дать пользователям возможность писать код 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 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, также может быть полезным.
Процесс, который я использую для внесения изменений в базу данных, выглядит следующим образом. Сначала создайте сценарий в моей среде Dev и попробуйте его там, пока он не будет работать так, как он ожидал. Затем восстановите базу данных Prod в моей тестовой среде и выполните сценарий в тесте. Это симуляция того, что произойдет в Prod. Как только там все работает как положено, наконец-то я запускаю скрипт в Prod.