Часто, когда разрабатываешь сайт, замечаешь, как на одни и те же грабли наступают разработчики при проектировании базы данных.
Сегодня я решил опубликовать свои шпаргалки, на самые часто встречающиеся ошибки при работе с MySQL.
Работа с бекапами
Делаем бекап
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql
Создаём структуру базы без данных
mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql
Заливаем бекап в базу данных
mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql
Создаём бекап и сразу его архивируем
mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz
Заливаем архив бекапа в базу
gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
Создаём новую базу данных
mysqladmin -u USER -pPASSWORD create NEWDATABASE
Удобно использовать бекап с дополнительными опциями -Q -c -e
, т.е.
mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql
, где:
- -Q оборачивает имена обратными кавычками
- -c делает полную вставку, включая имена колонок
- -e делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрее
Continue Reading →
Как быстро добавить пользователя?
shell> mysql —user=root mysql
mysql> CREATE USER ‘username’@’%’ IDENTIFIED BY ‘passwd’;
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘username’@’%’ WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
Просто:
> mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME > dump.txt
В unix shell запускаем crontab -e и создаем такое правило запуска процесса создания копий базы:
0 0 * * * mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME
| gzip -c > `date "+%Y-%m-%d"`.gz
Сложно:
Копирование баз данных MySql в архив — помошь, скрипты, примеры
Простой способ для /bin/sh (Запуск из коммандной строки SSH)
Код для скрипта:
#!/bin/sh
data=`/bin/date +%d.%m.%Y_%H-%M-%s`
#копирование данных из MySql в текстовый файл
/usr/local/bin/mysqldump --all-databases --user=NAME --password=PASS > /home/USER-NAME/sql-dump.sql
#превращает текстовый файл в архив
/usr/bin/gzip --best /home/USER-NAME/sql-dump.sql
#Перемещает файл sql-dump.sql в sql-dump_${data}.sql.gz
/bin/mv sql-dump.gz sql-dump_${data}.gz
Continue Reading →
Самый правильный перенос — это:
1. через консоль запаковать все файлы:
$ tar czf bitrix_folder.tar.gz bitrix_folder
2. запаковать базу данных:
$ mysqldump -u root -h localhost -pmypassword database_name | gzip -9 > database_name.sql.gz
3. Перенести файлы на целевой сервер
4. Распаковать файлы:
$ tar xzf bitrix_folder.tar.gz — файлы
$ gzip -d file.gz — базу
5. залить базу данны:
http://www.doless.ru/kak-bystro-vosst…mysql.html
6. Вписать новые (если необходимо) данные о соединении с базой данных, у битрикса это тут: /bitrix/php_interface/dbconn.php
VM1 — исходная виртуалка
VM2 — целевая
1. VM2 — Установить утилиту service – понадобится позже.
> apt-get install sysvconfig
2. VM2 — Необходимо добавить пользователя mysql с возможностью подключения с хоста VM1 и дать ему все привелегии.
- 3. VM2 — Открыть порт 3306:
> ufw allow 3306/tcp
- 4. VM2 — Разрешить серису mysql слушать порт 3306 снаружи, отредактировав файл /etc/mysql/my.cfg:
- bind-address = 127.0.0.1 # нужно закомментировать
- 5. VM2 — Рестартовать mysql:
- > service mysql restart
- 6. VM1 — Настроить и запустить скрипт для синхронизации баз данных MySQL и привелегий.
- 7. VM2 — Рестартовать mysql:
> service mysql restart #что бы перезагрузить привилегии.
- 8. VM1 Заархивировать папку www:
- > tar czf www.tar.gz www
- 9. Переносим архив с VM1 на VM2. Для этого я использую программу WinSCP (под Win32) – она поддерживает протокол SFTP. Хотя правильнее наверно использовать линуксовый rsync – но я пока его не освоил.
- 10. VM1 Распаковываем арихив:
- > tar xzf file.tar.gz
- 11. Переносим конфиги nginx и apache
- 12. Рестартуем apache:
> service apache2 restart
- 13. Перечитываем конфиги nginx:
> killall –HUP nginx
- 14. Радуемся, если этого для вас достаточно. А если нет, как мне, то ставим samba и postfix – но об этом позже.
Автор: Лобачев Виталий
Есть задача, нужно перенести все MySQL базы данных с одного сервера на другой, обычно это делают используя дамп всех MySQL баз данных, затем закачивают на другой сервер и импортируют дамп в MySQL, вариант хорош если вам некуда спешить, и нестрашно потратите вы на это час, два, или пол дня. Для одиночного переноса о репликации говорить тут не уместно. Я предлагаю более идеальный вариант как можно напрямую перенаправлять вывод дампа с одного сервера на другой.
Достоинства:
- Очень быстро, потому что дамп не попадает даже на жесткий диск, а сразу передается по сети на другой сервер и там же импортируется в MySQL. (Ок, тут немного соврал, возможно что-то где-то свопится
)
- Мы напишем скрипт который будет все делать сам при запуске, так мы можем делать бекап всех MySQL баз.
- А также вы можете положить скрипт в crontab, и регулярно синхронизировать базы данных, без репликации.
продолжение, о том как перенести MySQL
Для восстановления базы MySQL необходимо выполнить следующую последовательность команд:
$ mysql -u username –p (в конце строки пробел обязателен, иначе будет ругаться тип: Access denied for user ‘root’@’localhost’) |
— указать имя пользователя |
Enter password: password |
— ввести пароль пользователя |
mysql> use database_name; |
— ввести имя базы данных |
mysql> set names cp1251; |
— установить локаль (кодировку базы данных) |
mysql> source /var/www/backup.sql; |
— Указать путь к базе данных |
Готово!
P.S. не забывайте про точку с запятой там где они нужны.