Перенос базы на другой жёсткий диск¶
Жёсткий диск/раздел должен существовать в системе и быть подключен физически. Перенос базы данных выглядит так:
Нельзя использовать одну и ту же точку монтирования для файлов и БД.
Если на диске есть требуемые разделы, переходим к п. 2.
Если разделов нет — размечаем диск своей любимой программой разметки , например так:
sudo cfdisk /dev/sdX
и создаём на нём файловую систему командой
sudo mkfs.ext4 /dev/sdX
где Х — это завершение имени диска.
- Останавливаем сервисы командами:
sudo service postgresql stop sudo staffcop stop
- Редактируем файл /etc/fstab
sudo nano -w /etc/fstab
Прописываем туда следующую строку:
/dev/sdX /var/lib/postgresql/ ext4 rw,noatime 0 2
Где /dev/sdX — ваш жёсткий диск, /var/lib/postgresql/ — каталог, в котором будет отображаться содержимое диска, ext4 — тип файловой системы (если вы используете другую фс — jfs/xfs/reiser и т.д. эта опция меняется.) rw — означает разрешение на чтение-запись на диск. Также можно прописывать диск по UUID. Получить UUID диска можно командой:
sudo blkid
В этом случае первая часть записи примет вид UUID= , где в кавычки нужно вписать резальтат вывод вышеуказанной команды.
Разделы с GPT-форматированием можно примонтировать только по UUID-диска!
- Создаём папку для резервного копирования, и перемещаем данные из каталога базы данных туда.
mkdir /home/user/rezerv && sudo mv /var/lib/postgresql/* /home/user/rezerv
Где user — это домашний каталог пользователя, скорее всего, у вас он отличается. Узнать домашний каталог пользователя можно командой
env | grep -E "home|HOME"
результатом выдачи данной команды будет домашний каталог пользователя, от имени которого эта команда выполнена.
- Проверяем корректность монтирования командой
sudo mount -a
эта команда монтирует диск, который уже прописан в fstab, но еще не примонтирован.
Соответственно, если мы что-то вписали неверно либо ошиблись, то мы увидим ошибки монтирования, и, соответственно, получим возможность исправить допущенную ошибку. Проверяем корректность монтирования диска командой типа
df -h
Также можно проверить, что данный раздел доступен на запись. Например, создадим текстовый файл и проверим его наличие командами
touch /var/lib/postgresql/11/main/test_write.txt && ls -l /var/lib/postgresql/11/main/
Либо просто выполнив команду mount без параметров: ее результатом станет вывод всех монтированных систем; наше новое устройство должно быть монтировано rw.
- Копируем всё на жд,
sudo cp -R /home/user/rezerv/* /var/lib/postgresql/
В случае, если вы перемещали данные в другой каталог, произведите изменения в соответствии с реальным расположением файлов.
- Меняем владельца на postgres.
sudo chown -R postgres:postgres /var/lib/postgresql/11/main
- Выставляем ему права доступа на 700.
sudo chmod -R 700 /var/lib/postgresql/11/main
- Запускаем сервисы postgresql, staffcop и nginx.
sudo service postgresql start sudo staffcop start
sudo staffcop sql
в появившемся приглашении пишем analyze; ждём.
ошибки типа «ПРЕДУПРЕЖДЕНИЕ: «pg_shdescription» пропускается — только суперпользователь может анализировать этот объект» не критичны, т.к. говорят о том, что команда, запущенная с данными правами, не смогла проанализировать служебные таблицы БД. Это и не требуется.
- Заходим в веб-интерфейс, проверяем что всё работает, все отчёты видны и тд. Если всё в порядке, можно удалять резервные файлы
rm -R /home/user/rezerv
Как и любой rm следует применять с осторожностью.
© Copyright Atom Security, Inc.
Форум ФОСС-Он-Лайн
Перенести Базу данных SQL с одного диска на другой
7 сообщений • Страница 1 из 1
nikolay Пользователь Сообщения: 10 Зарегистрирован: 17 окт 2011, 11:23 2 + 2 = ?: 4
Перенести Базу данных SQL с одного диска на другой
Сообщение nikolay » 17 окт 2011, 11:30
Как перенести базу данный в MS SQL Server 2008 R2 c одного диска на другой. В настоящее время лежит в C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data
А нужно например в D:\Baza
mitok Разработчики FossDoc Сообщения: 5 Зарегистрирован: 07 дек 2010, 10:02 2 + 2 = ?: 4 Контактная информация:
Re: Перенести Базу данных SQL с одного диска на другой
Сообщение mitok » 17 окт 2011, 13:30
1. Отключите сервер FossDoc.
2. Далее Вам необходимо зайти в SQL Managment Studio.
3. Сделайте бэкап базы, которую хотите перенести на другой диск (на всякий случай).
4. Нажмите правой кнопкой по нужной вам базе пункт Tasks -> Detach. В открывшемся окне нажмите ок
base1.png (98.13 КБ) 36523 просмотра
base1_1.png (73.57 КБ) 36254 просмотра
5. Зайдите в ту папку, там где физически лежит Ваша база данных (например у Вас C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data) и скопируйте в новую папку или диск два файла, они должны называться как Ваша база данных (расширение файлов MDF и LDF).
6. В SQL Managment Studio, в дереве, станьте на элемент «Databases» и нажмите правую кнопку, затем Attach.
base2.png (101.56 КБ) 36166 просмотров
7. В появившемся окне нажмите Add (добавить) и выберите файл из той папки, куда вы скопировали базу и нажмите ок.
8. Можете запускать сервер FossDoc и продолжать работу.
Вложения base3.png (74.41 КБ) 36038 просмотров
zell Новичок Сообщения: 3 Зарегистрирован: 27 апр 2012, 08:44 2 + 2 = ?: 4
Re: Перенести Базу данных SQL с одного диска на другой
Сообщение zell » 27 апр 2012, 08:47
день добрый!
а как отключите сервер FossDoc.
FossWare Пользователь Сообщения: 380 Зарегистрирован: 19 дек 2008, 17:28
Re: Перенести Базу данных SQL с одного диска на другой
Сообщение FossWare » 27 апр 2012, 08:55
а как отключите сервер FossDoc.
Это можно сделать двумя способами либо зайти в Службы, которая расположена в Пуск -> Администрирование, и остановить службу FD22-FossDoc. Либо в системном трее Windows есть Менеджер серверов FossDoc. И там есть кнопка остановить сервер.
zell Новичок Сообщения: 3 Зарегистрирован: 27 апр 2012, 08:44 2 + 2 = ?: 4
Re: Перенести Базу данных SQL с одного диска на другой
Сообщение zell » 27 апр 2012, 09:38
спасибо за ответ! но у меня этой службы нет (( и при подключении базы(которую перенесли на другой диск) вот ткая ошибка:
TITLE: Microsoft SQL Server Management Studio
——————————
Attach database failed for Server ‘DATASERVER’. (Microsoft.SqlServer.Smo)
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
The file «E:\zupmpp82\zupmpp82.mdf» is compressed but does not reside in a read-only database or filegroup. The file must be
decompressed.
Could not open new database ‘zupmpp82’. CREATE DATABASE is aborted. (Microsoft SQL Server, Error: 5118)
Andrew Разработчики FossDoc Сообщения: 875 Зарегистрирован: 26 дек 2008, 16:03
Re: Перенести Базу данных SQL с одного диска на другой
Сообщение Andrew » 27 апр 2012, 10:13
Найдено в сети интернет:
When the mdf file is created on Vista it is in a compressed version. So when trying to use the same file on Win XP which is an uncompressed disc this problem occurs. The solution to this is marking the mdf and ldf file as uncompressed. Follow the following steps,
1. Right-click the .mdf file and select the properties menu.
2. From the Properties dialog box select the Advanced button
4. From the Advanced Dialog un-tick the «Compress Contents To Save Disk Space check box»
Do the same thing for the .ldf file
Если перевести кратко — файл сжат, и его нужно декопрессировать. Правой кнопкой на mdf-файле, меню «Свойства», потом Дополнительно (или Advanced) — снять галочку с «Compress Contents» (видимо «сжимать содержимое»).
Перенос WSUS на другой диск
Если на диске с данными WSUS кончилось свободное место, или он вышел из строя, возникает необходимость перенести данные на другой диск или раздел.
Задача решается в два этапа: перенос файлов обновлений и перенос базы данных.
Часть 1. Перенос файлов и папок WSUS
Для решения этой задачи мы воспользуемся утилитой командной строки для управления WSUS — WSUSutil.exe.
- Создаем на новом диске/разделе папку для контента WSUS
- Открываем командную строку от имени администратора
- Переходим в каталог C:\Program Files\Update Services\Tools
- В нашем примере мы перенесем контент WSUS на диск W: в папку WSUS, лог процесса положим в файл log.txt на том же диске.
Выполняем команду: wsusutil.exe movecontent W:\WSUS W:\log.txt
В зависимости от размера папки WSUS, выполнение команды может занять продолжительное время (несколько часов). По результатам получаем сообщение «Content move has successfully finished.«:
Если в вашем случае старый диск недоступен (вышел из строя), то команду следует выполнять с ключом -skipcopy, в нашем случае она выглядела бы вот так:
wsusutil.exe movecontent W:\WSUS W:\log.txt -skipcopy
Тогда WSUSutil только перепропишет пути хранения данных WSUS, и по окончанию выполнения команды скачает все необходимые обновления.
Что еще следует знать:
- диск, на который вы будете переносить данные, должен быть отформатирован в NTFS;
- WSUSutil не будет копировать те данные, которые уже есть в новом размещении;
- WSUSutil при переносе данных устанавливает те же NTFS-права, что были в источнике.
Подробнее об утилите управления WSUSutil вы можете почитать в статье Managing WSUS from the Command Line.
Часть 2. Перенос базы данных WSUS
- Если у вас не установлены средства управления сервером MS SQL, скачиваем MS SQL Server 2008 Management Studio Express (отсюда: http://www.microsoft.com/en-us/download/details.aspx?id=7593)
- Установливаем его. Следует заметить, что Microsoft унифицировала установку всех продуктов, связанных с MS SQL, поэтому инсталлятор консоли управления выглядит как инсталлятор полноценного сервера, и он отпугивает. Так что приведем небольшую шпаргалку, как поставить консоль управления:
На первом экране инсталлятора выбираем в меню слева Installation, справа — New SQL Server stand-alone installation or add features to an existing installation:

Доходим до этапа Installation Type, выбираем Perform a new installation of SQL Server 2008:

На этапе Feature Selection выбираем Management Tools — Basic:

Дальше процесс сводится к нажатию кнопки «Далее» и «Финиш».
Открываем SQL Server Management Studio:

Подключаемся к серверу \\.\pipe\mssql$microsoft##ssee\sql\query

Находим в списке базу WSUS, выполняем Detach:

В процессе отсоединения базы сбрасываем соединения, для чего проставляем галку Drop Connections:

После отсоединения, переносим базу в новое место. У нас это, как упоминалось, диск W:, папка WSUS:
И присоединяем базу обратно к серверу:

Файлы указываем уже в новом расположении:
Как перенести файлы базы данных sql на другой диск
Иногда возникает ситуация когда нужно перенести базы mysql в другое место. Например, на отдельный жесткий диск или просто в другое место (какие-то причины безопасности). Это может быть необходимо, если не хватает места на диске или для увеличения быстродействия, например ssd винт или raid массив.
Способ 1
Если вы хотите выделить под БД полностью весь жеский диск, то нужно просто примонтировать устройство в mysql директорию по умолчанию. Обычно это /var/lib/mysql Останавливаем сервер
/etc/init.d/mysqld stop
Копируем базы в какую-то временную директорию
mkdir /var/lib/mysql_temp cp -r /var/lib/mysql/* /var/lib/mysql_temp/
удаляем базы со старой директории
rm /var/lib/mysql/* -Rf
Предполагается что у вас уже есть подготовленный жесткий диск. Если же нет, то его нужно предварительно разбить и создать файловую систему. Это можно сделать например при помощи cfdisk. И так примонтируем устройство:
mount /dev/sda3 /var/lib/mysql
нужно не забыть прописать в файле /etc/fstab примонтированный раздел, для того что бы при следующей загрузке системы он автоматически монтировался. Более подробнее смотрите мануалы по fstab и mount. В fstab должна быть запись вида:
/dev/sda3 /var/lib/mysql ext4 defaults 0 0
далее переносим назад наши базы
cp -r /var/lib/mysql_temp/* /var/lib/mysql/
и удаляем резервную копию (с этим лучше пока не спешить, удалить можно когда все успешно перенеслось)
rm /var/lib/mysql_temp/ -Rf
далее нужно правильно выставить права доступа к /var/lib/mysql. Владелец папки должен быть mysql c правом на запись
chown mysql:mysql /var/lib/mysql/ -R chmod 755 /var/lib/mysql
а так же еще один важный момент, выставляем SELinux права доступа
chcon -R system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
проверить SELinux права можно командой ls -Z, должно быть что-то вроде этого:
ls -Z /var/lib/mysql/ drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
теперь запускаем mysql демон
/etc/init.d/mysqld start
Способ 2
Если нужно использовать для хранилища не весь раздел, а только директорию на нем или переместить базы в другую директорию, то делаем следующее
/etc/init.d/mysqld stop
копируем базы в новое место. Например, если мы хотим, что бы базы лежали в /media/sda3/mysql/
mkdir /media/sda3/mysql/ cp -r /var/lib/mysql/* /media/sda3/mysql/
ставим права доступа к /media/sda3/mysql/
chown mysql:mysql /var/lib/mysql/ -R chmod 755 /var/lib/mysql
а так же SELinux права доступа
chcon -R system_u:object_r:mysqld_db_t:s0 /media/sda3/mysql/
правим конфиг my.cnf. Обычно он находится в /etc/my.cnf либо /etc/mysql/my.cnf
[mysqld] datadir=/media/sda3/mysql socket=/media/sda3/mysql/mysql.sock log-bin=/media/sda3/mysql/mysql-bin [mysqld_safe] datadir=/media/sda3/mysql
теперь запускаем mysql демон
/etc/init.d/mysqld start
На этом всё. Если что-то не получается, смотрим лог в /var/log/mysql.log
