Фев
26
2009
Перенаправление вывода с mysqldump в gzip, bzip2, lzma
Пример для gzip сжатия
mysqldump < mysqldump options> | gzip > outputfile.sql.gz
С помощью gunzip импортируем сжатий дамп gzip-ом
gunzip < outputfile.sql.gz | mysql < mysql options>
Сжимаем вывод mysqldump-a используя архиватор bzip2
mysqldump < mysqldump options> | bzip2 > outputfile.sql.bz2
Импортируем обратно:
Bunzip2 and import using bzip2
bunzip2 < outputfile.sql.bz2 | mysql < mysql options>
Делаем mysql дамп и напрямую сжимаем его с помощью lzma
mysqldump < mysqldump options> | lzma > outputfile.sql.lzma
Импорт
unlzma < outputfile.sql.lzma | mysql < mysql options>
1 comment | tags: Linux, MySQL, mysqldump | posted in MySQL, Другое
Фев
10
2009
Есть хорошая MySQL утилита, называется mysqlcheck, с помощью этой утилиты можно выполнить сразу несколько полезных операций над всеми MySQL базами данных. Команду нужно запускать от суперпользователя root.
Восстановление & Оптимизация
Только ввостановление
Только оптимизация
Описание аргументов:
-A – Проверить на ошибки все Mysql базы данных
-r – Отремонтировать все Mysql базы данных
-o – Оптимизировать все Mysql базы данных
3 comments | tags: MySQL, Диагностика MySQL | posted in MySQL, Новости
Фев
7
2009
Есть задача, нужно перенести все MySQL базы данных с одного сервера на другой, обычно это делают используя дамп всех MySQL баз данных, затем закачивают на другой сервер и импортируют дамп в MySQL, вариант хорош если вам некуда спешить, и нестрашно потратите вы на это час, два, или пол дня. Для одиночного переноса о репликации говорить тут не уместно. Я предлагаю более идеальный вариант как можно напрямую перенаправлять вывод дампа с одного сервера на другой.
Достоинства:
- Очень быстро, потому что дамп не попадает даже на жесткий диск, а сразу передается по сети на другой сервер и там же импортируется в MySQL. (Ок, тут немного соврал, возможно что-то где-то свопится
)
- Мы напишем скрипт который будет все делать сам при запуске, так мы можем делать бекап всех MySQL баз.
- А также вы можете положить скрипт в crontab, и регулярно синхронизировать базы данных, без репликации.
Предупреждения
Будьте осторожны, этот скрипт уничтожит все существующие базы данных на стороне нового сервера.
Материал очень серьезный, если вы новичок, и не понимаете что делаете, лучше не рискуйте, потратте больше времени, сделайте стандартными методами бекап, зато будете уверены что все нормально.
А те кого уже достало руками перекидывать базы данных, тот может автоматизировать этот процесс, используя скрипт что ниже.
Скрипт
#!/bin/bash
# Указываем путь к mysql и mysqldump
CMD_MYSQL="/usr/bin/mysql"
CMD_MYSQLDUMP="/usr/bin/mysqldump"
# логин, пароль, имя хоста на локальном сервере
DB_USER_FROM="root"
DB_PASS_FROM="passxxx"
DB_HOST_FROM="source.example.com"
# логин, пароль, имя хоста на удаленном сервере (куда будет заливаться копия всех бд)
DB_USER_TO="root"
DB_PASS_TO="passxxx"
DB_HOST_TO="destination.example.com"
# Получаем список всех БД
echo "database sync"
DATABASES=`echo "SHOW DATABASES;" | ${CMD_MYSQL} -p${DB_PASS_FROM} -u ${DB_USER_FROM} -h ${DB_HOST_FROM}`
# Начинаем обрабатывать каждую базу данных кроме information_schema и Database
for DATABASE in $DATABASES; do
# skip non-databases
if [ "${DATABASE}" != "Database" ] && [ "${DATABASE}" != "information_schema" ]; then
echo "transmitting ${DATABASE}"
# Создаем базу данных на удаленном сервере если такая еще не существует
echo "CREATE DATABASE IF NOT EXISTS ${DATABASE}" | ${CMD_MYSQL} -p${DB_PASS_TO} -u ${DB_USER_TO} -h ${DB_HOST_TO}
#Дампим базу данных и перенаправляем вывод дампа прямо на удаленный сервер
${CMD_MYSQLDUMP} -Q -B --create-options --delayed-insert --complete-insert --quote-names --add-drop-table -p${DB_PASS_FROM} -u${DB_USER_FROM} -h${DB_HOST_FROM} ${DATABASE} | ${CMD_MYSQL} -p${DB_PASS_TO} -u ${DB_USER_TO} -h ${DB_HOST_TO} ${DATABASE}
fi
done
Сохраните куда нибудь скрипт, например в /root/bin и сделайте его выполняемым
chmod a+x /root/bin/mysql-sync.bash
Что дальше
1) Правим скрипт, указывая свои данные.
2) Проверяем как настроен iptables, разрешаем ему коннект к удаленному серверу и 3306 порту.
3) На удаленном сервере разрешаем подключение к себе (на уровне MySQL).
GRANT all on *.* to 'root'@'hostname';
Запуск
/root/bin/mysql-sync.bash
Способ также хорош для разработчиков веб приложений, которые работают с локальной БД, и часто занимаются переносом бд с local на удаленный сервер. Одним кликом запускаете синхронизацию баз данных, и наслаждатесь процессом.
1 comment | tags: MySQL, бекап БД | posted in MySQL, Новости