#sudo apt-get install python-software-properties
понедельник, 27 февраля 2012 г.
понедельник, 30 января 2012 г.
Обработка параметров командной строки в скриптах bash
while getopts lrd:p:h: name
do
case $name in
l) lflag=1;;
r) rflag=1;;
d) dbname=$OPTARG;;
h) host=$OPTARG;;
p) port=$OPTARG;;
?) printf "Usage: %s: [-lr] [-d dbname] [-h hostname] [-p dbport]\n" $0
exit 2;;
esac
done
do
case $name in
l) lflag=1;;
r) rflag=1;;
d) dbname=$OPTARG;;
h) host=$OPTARG;;
p) port=$OPTARG;;
?) printf "Usage: %s: [-lr] [-d dbname] [-h hostname] [-p dbport]\n" $0
exit 2;;
esac
done
вторник, 10 января 2012 г.
среда, 4 января 2012 г.
среда, 28 декабря 2011 г.
цветной hg diff
В hgrc дописываем
[extensions]
hgext.extdiff =
[defaults]
cdiff = -q
[extdiff]
cmd.cdiff = colordiff
opts.cdiff = -uprN
(http://mercurial.selenic.com/wiki/TipsAndTricks)
[extensions]
hgext.extdiff =
[defaults]
cdiff = -q
[extdiff]
cmd.cdiff = colordiff
opts.cdiff = -uprN
(http://mercurial.selenic.com/wiki/TipsAndTricks)
пятница, 16 декабря 2011 г.
Несколько копий MySQL на одном сервере
Стала задача запустить вторую копию MySQL на сервере где уже установлена одна копия из репозитория.
Есть несколько вариантов таких как использовать Mysqld_multi...
Так как мне нужно было использовать другую версию я решил использовать бинарную версию скачаную непосредственно с www.mysql.com
# cd /opt
# wget "http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.60-linux-x86_64-glibc23.tar.gz/from/http://mirrors.dotsrc.org/mysql/"
# tar zxvf mysql-5.1.60-linux-x86_64-glibc23.tar.gz
# ln -s /opt/mysql-5.1.60-linux-x86_64-glibc23/ /opt/mysql
Если нужно добавляем пользователя и группу mysql
# chown -R mysql.mysql /opt/mysq/
# cd /opt/mysql
# scripts/mysql_install_db --user=mysql
# chown -R root .
# mkdir etc mysql-updates tmp logs
# chown -R mysql data mysql-updates tmp logs
# cp support-files/my-medium.cnf /opt/mysql/etc/my.cnf
В фале конфигурации my.cnf заменяем стандартные порты и адрес к папке с базами данных
[mysqld]
user = mysql
socket = /opt/mysql/tmp/mysqld.sock
port = 3307
pid_file = /opt/mysql/tmp/mysqld.pid
basedir = /opt/mysql
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
log-slow-queries = /opt/mysql/logs/mysql_slow.log
# Если используем bin-log то для него тоже задаем путь
log-bin = /opt/mysql/mysql-updates/worldticket
[client]
port = 3307
socket = /opt/mysql/tmp/mysqld.sock
[mysqld_safe]
socket = /opt/mysql/tmp/mysqld.sock
Для запуска используем команду
# /opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/etc/my.cnf &
Для подключения к серверу
# /opt/mysql/bin/mysql --defaults-file=/opt/mysql/etc/my.cnf
Есть несколько вариантов таких как использовать Mysqld_multi...
Так как мне нужно было использовать другую версию я решил использовать бинарную версию скачаную непосредственно с www.mysql.com
# cd /opt
# wget "http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.60-linux-x86_64-glibc23.tar.gz/from/http://mirrors.dotsrc.org/mysql/"
# tar zxvf mysql-5.1.60-linux-x86_64-glibc23.tar.gz
# ln -s /opt/mysql-5.1.60-linux-x86_64-glibc23/ /opt/mysql
Если нужно добавляем пользователя и группу mysql
# chown -R mysql.mysql /opt/mysq/
# cd /opt/mysql
# scripts/mysql_install_db --user=mysql
# chown -R root .
# mkdir etc mysql-updates tmp logs
# chown -R mysql data mysql-updates tmp logs
# cp support-files/my-medium.cnf /opt/mysql/etc/my.cnf
В фале конфигурации my.cnf заменяем стандартные порты и адрес к папке с базами данных
[mysqld]
user = mysql
socket = /opt/mysql/tmp/mysqld.sock
port = 3307
pid_file = /opt/mysql/tmp/mysqld.pid
basedir = /opt/mysql
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
log-slow-queries = /opt/mysql/logs/mysql_slow.log
# Если используем bin-log то для него тоже задаем путь
log-bin = /opt/mysql/mysql-updates/worldticket
[client]
port = 3307
socket = /opt/mysql/tmp/mysqld.sock
[mysqld_safe]
socket = /opt/mysql/tmp/mysqld.sock
Для запуска используем команду
# /opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/etc/my.cnf &
Для подключения к серверу
# /opt/mysql/bin/mysql --defaults-file=/opt/mysql/etc/my.cnf
понедельник, 5 декабря 2011 г.
Перенос базы данных MySQL на другой сервер при минимальном простое
Для обычного перемещения базы MySQL с одного сервера на другой вполне подойдет обычный mysqldump, но когда это продакшен сервер и база занимает больше 10Gb простой может длиться слишком долго. В таких случаях подойдет репликация Master-Slave.
Для начала на обоих серверах включаем bin-log. Не буду углубляться но этих настроек должно быть достаточно:
binlog-format = ROW
log-bin = /var/lib/mysql/mysql-updates/mysql-binlogs
expire_logs_days = 14
max_binlog_size = 1024M
Далее на Master добавляем пользователя с правами для репликации
CREATE USER 'replication'@'10.0.0.18' IDENTIFIED BY '123password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.18';
FLUSH PRIVILEGES;
Делаем дамп необходимой базы с меткой позиции в bin-log
# mysqldump --add-drop-table --flush-logs --master-data=2 --single-transaction database_name | gzip --fast > database_name.sql.gz
копируем дамп на Slave-сервер, распаковываем его и заливаем в базу
# gzip -d database_name.sql.gz
# mysql database_name < database_name.sql
В настройках MySQL (файл my.cnf) в разделе [mysqld] добавляем параметр в котором укажем имя базы что мы будем реплицировать
replicate-do-db = database_name
и перезапускаем MySQL
Из дампа смотри имя bin-log файла и позицию
# cat database_name.sql | grep MASTER_LOG_POS
Далее на Slave в MySQL выполняем команды для настройки репликации
CHANGE MASTER TO MASTER_HOST='10.0.0.20', MASTER_USER='replication',MASTER_PASSWORD='123password', MASTER_LOG_FILE='mysql-binlogs.000267', MASTER_LOG_POS=125827306;
START SLAVE;
в параметрах передаем все необходимые значения.
После всех выполненных действий репликация должны начаться и базы должны быть идентичны.
Командой SHOW SLAVE STATUS\G можем посмотреть состояние Slave и последние ошибки связанные с репликацией.
После того как базы синхронизируются мы переводим Slave в режим Master
STOP SLAVE; CHANGE MASTER TO MASTER_HOST=''; RESET SLAVE;
Из конфига убираем replicate-do-db и перезапускаем MySQL.
Все, мы перенесли всю базу на новый сервер, в приложении необходимо всего навсего сменить настройки подключения у новой базе.
Для начала на обоих серверах включаем bin-log. Не буду углубляться но этих настроек должно быть достаточно:
binlog-format = ROW
log-bin = /var/lib/mysql/mysql-updates/mysql-binlogs
expire_logs_days = 14
max_binlog_size = 1024M
Далее на Master добавляем пользователя с правами для репликации
CREATE USER 'replication'@'10.0.0.18' IDENTIFIED BY '123password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.18';
FLUSH PRIVILEGES;
Делаем дамп необходимой базы с меткой позиции в bin-log
# mysqldump --add-drop-table --flush-logs --master-data=2 --single-transaction database_name | gzip --fast > database_name.sql.gz
копируем дамп на Slave-сервер, распаковываем его и заливаем в базу
# gzip -d database_name.sql.gz
# mysql database_name < database_name.sql
В настройках MySQL (файл my.cnf) в разделе [mysqld] добавляем параметр в котором укажем имя базы что мы будем реплицировать
replicate-do-db = database_name
и перезапускаем MySQL
Из дампа смотри имя bin-log файла и позицию
# cat database_name.sql | grep MASTER_LOG_POS
Далее на Slave в MySQL выполняем команды для настройки репликации
CHANGE MASTER TO MASTER_HOST='10.0.0.20', MASTER_USER='replication',MASTER_PASSWORD='123password', MASTER_LOG_FILE='mysql-binlogs.000267', MASTER_LOG_POS=125827306;
START SLAVE;
в параметрах передаем все необходимые значения.
После всех выполненных действий репликация должны начаться и базы должны быть идентичны.
Командой SHOW SLAVE STATUS\G можем посмотреть состояние Slave и последние ошибки связанные с репликацией.
После того как базы синхронизируются мы переводим Slave в режим Master
STOP SLAVE; CHANGE MASTER TO MASTER_HOST=''; RESET SLAVE;
Из конфига убираем replicate-do-db и перезапускаем MySQL.
Все, мы перенесли всю базу на новый сервер, в приложении необходимо всего навсего сменить настройки подключения у новой базе.
Подписаться на:
Сообщения (Atom)