В этой статье мы рассмотрим, как создать резервную копию и восстановить SQL-базу данных в CentOS. Этот учебник является второй частью серии “Управление SQL-сервером на CentOS”. В предыдущей статье мы рассмотрели установку и создание SQL-базы данных в CentOS.
Прежде чем мы начнем, давайте рассмотрим схему базы данных и данные. Выполните следующие запросы, чтобы просмотреть список файлов, файловых групп, таблиц и данных:
USE stackoverflow2010;
-- Запрос для просмотра списка файлов и файловых групп
SELECT fg.NAME AS [Имя файловой группы], sdf.NAME AS [Логическое имя файла], sdf.physical_name AS [Местоположение файла], size/128 AS [Размер файла]
FROM sys.database_files sdf
INNER JOIN sys.filegroups fg ON sdf.data_space_id = fg.data_space_id;
-- Запрос для просмотра списка таблиц и данных
SELECT t.Name AS ИмяТаблицы, sch.Name AS ИмяСхемы, part.Rows AS КоличествоСтрок
FROM sys.tables t
INNER JOIN sys.indexes indx ON t.object_id = indx.object_id
INNER JOIN sys.partitions part ON indx.object_id = part.object_id AND indx.index_id = part.index_id
INNER JOIN sys.allocation_units a ON part.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas sch ON t.schema_id = sch.schema_id
WHERE t.Name NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND indx.object_id > 255
GROUP BY t.Name, sch.Name, part.Rows
ORDER BY t.Name;
После того, как вы ознакомились с схемой базы данных, приступим к процессу создания резервной копии. Выполните следующую команду, чтобы создать копию базы данных stackoverflow2010:
BACKUP DATABASE [StackOverflow2010] TO DISK = 'D:\SQLBackups\StackOverflow\StackOverflow2010.bak' WITH COPY_ONLY, STATS = 5;
Теперь скопируйте файл резервной копии на CentOS. Создайте необходимые каталоги на CentOS, выполнив следующие команды:
[root@localhost /]# mkdir /SQLServer
[root@localhost /]# mkdir /SQLServer/SQLBackup
Затем запустите WinSCP и настройте сеанс для копирования файлов между серверами. Укажите данные для входа и укажите соответствующий протокол передачи файлов (в данном случае SFTP), имя хоста/IP-адрес, порт, имя пользователя и пароль. После подключения вы можете перетащить файлы резервной копии из папки D:\SQLBackup\Stackoverflow в каталог /SQLServer/SQLBackup на CentOS.
После копирования файла резервной копии проверьте, что он был успешно скопирован, и проверьте разрешения, выполнив следующую команду:
[root@localhost /]# ls -l /SQLServer/SQLBackup/
Теперь давайте восстановим базу данных в SQL-сервере на CentOS. Выполните следующую команду восстановления:
USE [master];
RESTORE DATABASE [StackOverflow2010] FROM DISK = N'/SQLServer/SQLBackup/StackOverflow2010.bak'
WITH FILE = 1,
MOVE N'StackOverflow2010' TO N'/var/opt/mssql/data/StackOverflow2010.mdf',
MOVE N'fg_posts_data' TO N'/var/opt/mssql/data/fg_posts_data.ndf',
MOVE N'Stackoverflow2010_Posts' TO N'/var/opt/mssql/data/Stackoverflow2010_Posts.ndf',
MOVE N'StackOverflow2010_log' TO N'/var/opt/mssql/data/StackOverflow2010_log.ldf',
MOVE N'DF_MemoryOptimized_Posts' TO N'/var/opt/mssql/data/FG_MemoryOptimized_Posts',
NOUNLOAD,
STATS = 5;
Наконец, выполните следующие запросы, чтобы убедиться, что база данных была успешно восстановлена:
USE stackoverflow2010;
-- Запрос для просмотра списка файлов и файловых групп
SELECT fg.NAME AS [Имя файловой группы], sdf.NAME AS [Логическое имя файла], sdf.physical_name AS [Местоположение файла], size/128 AS [Размер файла]
FROM sys.database_files sdf
INNER JOIN sys.filegroups fg ON sdf.data_space_id = fg.data_space_id;
-- Запрос для просмотра списка таблиц и данных
SELECT t.Name AS ИмяТаблицы, sch.Name AS ИмяСхемы, part.Rows AS КоличествоСтрок
FROM sys.tables t
INNER JOIN sys.indexes indx ON t.object_id = indx.object_id
INNER JOIN sys.partitions part ON indx.object_id = part.object_id AND indx.index_id = part.index_id
INNER JOIN sys.allocation_units a ON part.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas sch ON t.schema_id = sch.schema_id
WHERE t.Name NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND indx.object_id > 255
GROUP BY t.Name, sch.Name, part.Rows
ORDER BY t.Name;
Поздравляю! Вы успешно создали резервную копию и восстановили SQL-базу данных в CentOS. Этот процесс полезен при миграции операционной системы SQL-сервера с Windows на Linux. В следующей статье мы рассмотрим, как скопировать SQL-базу данных с Windows 10 на CentOS с помощью мастера импорта-экспорта SQL-сервера.