In this blog post I am going to explain about setting up drupal multisite with Apache Alias and it is a continuation of previous blog post
where i explained about using single drupal installation to host more
than one site with quiz module branches (quiz 3.x and quiz 4.x) as
example.
more
Привет! Бывает, хочется забыть о «скучной» консоли, разбавить ее хоть
капелькой интерактива, особенно если часто приходиться делать одни и
теже операции и тем более если вы пишите для облегчения своей участи
скрипты. Итак, псевдографика. За мной читатель, я покажу тебе такую
консоль!
Наверняка многие задумывались, запуская make && make install во
FreeBSD или apt-get install, например в Debian, как же хорошо было бы
использовать подобные диалоги конфигурирования. Они неоправданно забыты и
практически вообще не используются в пользовательских скриптах. Очень и
очень зря.
Исправить это может замечательная утилита dialog.
Она присутствует во FreeBSD седьмой, восьмой ветки, а в Debian,
например, можно сделать apt-get install dialog. Вообще-то, это разные
программы.
Во FreeBSD немного попроще версия:
$ dialog
dialog version 0.3, by Savio Lam (lam836@cs.cuhk.hk).
patched to version 0.4 by Stuart Herbert (S.Herbert@shef.ac.uk)
Changes Copyright © 1995 by Andrey A. Chernov, Moscow, Russia
patched by Anatoly A. Orehovsky (tolik@mpeks.tomsk.su)
* Display dialog boxes from shell scripts *
Usage: dialog --clear
dialog --create-rc <file>
dialog [--title <title>] [--clear] [--hline <line>] [--hfile <file>]\
<Box options>
Box options:
--yesno <text> <height> <width> [yes|no]
--msgbox <text> <height> <width>
--prgbox "<command line>" <height> <width>
--infobox <text> <height> <width>
--inputbox <text> <height> <width> [<init string>]
--textbox <file> <height> <width>
--menu <text> <height> <width> <menu height> <tag1> <item1>...
--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--ftree <file> <FS> <text> <height> <width> <menu height>
--tree <FS> <text> <height> <width> <menu height> <item1>...
В Linux-версии возможностей побольше:
$ dialog
cdialog (ComeOn Dialog!) version 1.1-20080316
Copyright 2000-2006,2007 Thomas E. Dickey
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Display dialog boxes from shell scripts *
Usage: dialog <options> { --and-widget <options> }
where options are "common" options, followed by "box" options
Special options:
[--create-rc "file"]
Common options:
[--ascii-lines] [--aspect <ratio>] [--backtitle <backtitle>]
[--begin <y> <x>] [--cancel-label <str>] [--clear] [--colors]
[--cr-wrap] [--default-item <str>] [--defaultno] [--exit-label <str>]
[--extra-button] [--extra-label <str>] [--help-button]
[--help-label <str>] [--help-status] [--ignore] [--input-fd <fd>]
[--insecure] [--item-help] [--keep-tite] [--keep-window]
[--max-input <n>] [--no-cancel] [--no-collapse] [--no-kill]
[--no-label <str>] [--no-lines] [--no-ok] [--no-shadow] [--nook]
[--ok-label <str>] [--output-fd <fd>] [--print-maxsize] [--print-size]
[--print-version] [--separate-output] [--separate-widget <str>]
[--shadow] [--single-quoted] [--size-err] [--sleep <secs>] [--stderr]
[--stdout] [--tab-correct] [--tab-len <n>] [--timeout <secs>]
[--title <title>] [--trace <file>] [--trim] [--version] [--visit-items]
[--yes-label <str>]
Box options:
--calendar <text> <height> <width> <day> <month> <year>
--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--dselect <directory> <height> <width>
--editbox <file> <height> <width>
--form <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
--fselect <filepath> <height> <width>
--gauge <text> <height> <width> [<percent>]
--infobox <text> <height> <width>
--inputbox <text> <height> <width> [<init>]
--inputmenu <text> <height> <width> <menu height> <tag1> <item1>...
--menu <text> <height> <width> <menu height> <tag1> <item1>...
--mixedform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>...
--mixedgauge <text> <height> <width> <percent> <tag1> <item1>...
--msgbox <text> <height> <width>
--passwordbox <text> <height> <width> [<init>]
--passwordform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
--pause <text> <height> <width> <seconds>
--progressbox <height> <width>
--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--tailbox <file> <height> <width>
--tailboxbg <file> <height> <width>
--textbox <file> <height> <width>
--timebox <text> <height> <width> <hour> <minute> <second>
--yesno <text> <height> <width>
Собственно уже из списка опций понятно, что эта программа позволит сделать, однако для наглядности я продемонстрирую пример.
Бэкап файлов и принудительный сброс на диск дампа выбранной базы (или всех) MySQL:
$ cat ./xbackup.sh
#!/bin/sh
SRC="/usr/home/dev/"
SITE="${SRC}_Web/"
PROJECT="${SRC}_Project/"
# куда будем складывать бэкапы
DST="/usr/home/share/BACKUP/"
# реквизиты для Mysql
SQLLOGIN="root"
SQLPASS="TopSecretPassword"
SQLHOST="localhost"
/* --------------------------------------------------------------------------------------------------------- */
# именовать файлы дампов и архивов будем по дате
DATE=`date "+%Y.%m.%d_%H-%M-%S"`
DSRC=""
# переменная для сохранения выбранного типа бэкапа (база или сайт)
backupType=0
# вызываемая программа для создания диалога
DIALOG=dialog
# временный файл
tempfile=`mktemp /tmp/bkp.XXXXXX`
trap "rm -f $tempfile" 0 1 2 5 15
# функция для вывода информационного окна
InfoDialog() {
${DIALOG} --msgbox "$1" 5 70
}
# упаковка файлов из выбранной директории
BackupFiles() {
if [ ! -d ${2} ]; then
mkdir -p ${2}
fi
tar -c --gzip -f "${2}${DATE}.tar.gz" "${1}"
InfoDialog "OK -> ${2}${DATE}.tar.gz"
}
# сохранения дампа базы в файл
BackupMySQL() {
case ${1} in
"All_Database")
mysqldump -R -E --triggers -u"${SQLLOGIN}" -p"${SQLPASS}" --all-databases > "${tempfile}"
;;
"")
InfoDialog "Backup has been canceled"
exit
;;
*)
mysqldump -R -E --triggers -u"${SQLLOGIN}" -p"${SQLPASS}" ${DBase} > "${tempfile}"
;;
esac
cp "${tempfile}" "${DST}${1}-${DATE}.sql"
# компрессия gzip, отключено за ненадобностью — распаковывать неудобно
echo tar -c --gzip -f "${2}${DATE}.dump" "${tempfile}"
InfoDialog "OK -> ${2}${DATE}.dump"
}
# выбор базы данных из списка существующих на сервере
ChooseDatabase() {
# получаем листинг баз
DBases=` echo "SHOW DATABASES" | mysql -u"${SQLLOGIN}" -p"${SQLPASS}" `
# хитро обеспечиваем опцию All_Database
List="All_${DBases}"
# выводим диалог выбора базы из списка
$DIALOG --title "Please choose a Database " --tree "FS" "List of existing databases" 14 78 7 ${List} 2> ${tempfile}
case $? in
0)
# выбор сделан
DBase=`cat ${tempfile}`
BackupMySQL ${DBase}
;;
1|255)
# диалог прерван (ескейп например)
InfoDialog "Backup has been canceled"
exit
;;
esac
}
# выбор папки с сайтом (реализованвыбор нужного из денвероподобной структуры папок с сайтами)
ChooseDomain() {
Paths=`ls ${1}`
List=""
isEmpty=true
for dName in ${Paths}
do
# выводим только папки внутри которых есть корен сайта или поддомен www (структура реализована совсем как в денвере)
if [ -d "${1}${dName}/www" ] || [ -d "${1}${dName}/htdocs" ]; then
List="${List} ${dName}"
isEmpty=false
fi
done
# таким образом проверяем что выбран корень сайта и пора всетаки паковать его, иначе выводим список подпапок
if ${isEmpty}; then
Count=`echo ${SRC} | wc -c | tr -d ' '`
DSRC=`echo ${1} | awk "{ print substr($ 1, ${Count}) }"`
return 0;
fi
# собстно вывод список папок внутри выбранной
$DIALOG --title "Please choose a path " --tree "FS" "List of existing domains" 14 78 7 ${List} 2> ${tempfile}
case $? in
0)
DName=`cat ${tempfile}`
ChooseDomain "${1}${DName}/"
;;
1|255)
InfoDialog "Backup has been canceled"
exit
;;
esac
}
ProcessBackup() {
case $1 in
Site)
ChooseDomain ${SITE}
BackupFiles "${SRC}${DSRC}" "${DST}${DSRC}"
;;
MySQL)
ChooseDatabase
;;
*)
;;
esac
}
TypeDialog() {
${DIALOG} --title "Choose backup type:" --menu "This is backup types" 12 50 4 \
"Site" "backup web-site" \
"MySQL" "Mysql database" 2> ${tempfile}
case $? in
0)
ProcessBackup `cat ${tempfile}`
TypeDialog
;;
1|255)
InfoDialog "Backup has been canceled"
exit
;;
esac
}
TypeDialog
Выглядит это вот так:
Вот и все. Теперь при работе скрипта можно любоваться интерактивными
«окошечками». Таким же образом легко реализовать выполнение любых
консольных команд, а сочетая это с запуском putty из командной строки с
авторизацией по ключу, можно дать красивый консольный интерфейс для,
например, рестарта апачи на дев-сервере(конечно через sudo с жесткими
ограничениями), всем разработчикам в команде, даже незнакомым с *nix
системами.
Уверен, кому-то изложенные знания пригодятся для того чтобы сделать консоль своего сервера «более User Friendly».
P.S. В процессе написания наткнулся на хорошие примеры http://www.oszone.net/2833/, кое-что оттуда сразу внедрил.
(c)
You can change the associations in gconf-editor
. Expand desktop -> gnome -> url-handlers and find the entry for FTP and change the command to your preferences.
(c)
Автор
Иванов Илья, http://bozza.ru, апрель 2010
Вступление
Если в домене Windows установлен WSUS, админ рад и спокоен - дескать,
все, обновления ставятся на автомате, трафик снизился, бегать по компам
не надо и пр. В принципе, все осталость то же самое, но ведь не все
используют в работе Microsoft Outlook или Internet Explorer (хотя 8-ка
очень неплоха). Есть много людей, привыкших работать с почтовиком The
Bat!, броузером Opera или Mozilla. Если встает вопрос об обновлениях -
либо это головняк админу в виде беготни к каждому компьютеру для
обновления всем, скажем, Opera, либо юзеры должны сидеть под админами
(пускай и локальными, не доменными).
Естественно, ни первый, ни второй способы - не выход. Значит, надо иметь возможность автоматически устанавливать программы на рабочих станциях, причем желательно делать это до того, как пользователь вошел в систему - ведь если он вошел, он уже не захочет перезагружать машину и т.п. Надо ставить пользователя перед фактом - программа, его любимая Opera, уже обновлена и админа не колбасит, что версия 10.10 почему-то нравится меньше, чем предыдущая. Просто вышло обновление, и его надо применить. Без вариантов.
Самый распространенный вариант ответа на вопрос - КАК? - Конечно, через Active Directory! - скажет вам любой специалист или просто сисадмин. А как через AD? - спросите вы. А вам скажут - ?! Вы не знаете, как через AD? Да там же просто, через policy! - но больше вам скорее сего ничего не скажут, потому что для большинства советчиков этот вопрос такой же неясный, как и для вас. И вам ничего не останется, как гуглить до потери пульса, потому что найти огромный фолиант на тему "как развернуть office 2007" в сети корпорации не проблема, а вот просто и в двух словах - редко что найдете. Не без гордости могу сказать, что данная статья как раз одна из немногих кратких и "без наворотов", попадавшихся мне.
Установка программ из MSI
Все изложенное далее относится к работе с инсталляционными пакетами типа MSI (расширение .msi). Файлы MSI есть (или их можно извлечь) для многих программ (Adobe Acrobat, The Bat, Opera, Firefox и пр.).
Предположим, мы хотим автоматически установить (а по мере выхода обновлений, устанавливать обновления) броузер Firefox. Файл msi для Firefox можно взять здесь (в новом окне).
Настройку шаблона .adm я пропущу, т.к. далеко не всегда это нужно, а еще чаще этот шаблон фиг найдешь. В итоге - дефолтные настройки (либо, если будем ставить поверх старой версии - настройки будут сохранены). Шаблон .adm нам не нужен.
Распределяем права доступа
Предполагаю, что все учетные записи компьютеров (кроме контроллеров домена) находятся в OU "OU Office Computers".
Примечание 1:
Почему лучше не использовать исходное размещение компьютеров (Computers - Компьютеры домена в оснастке Active Directory Users and Computers)? Мне удобнее в дальнейшем управлять политиками для групп компьютеров. К тому же, когда я посещал курсы Microsoft, я видел, что на контроллерах доменов в тестовых системах и в "боевых", настроенных специалистами Microsoft, используются практически только отдельно созданные OU, а не базовые. Я для себя решил повторять опыт специалистов. Пока мне от этого только удобнее. Естественно, ИМХО.
Примечание 2:
Не всем пользователям нужен Firefox (как не всем нужен The Bat, Opera и пр.). Поэтому создадим в "OU Office Computers" отдельную группу компьютеров, на которые будет установлен Firefox. Для ясности назовем группу GFirefoxComputers. Отмечу, что это будет именно группа, а не вложенное OU!
Расшариваем какую-либо папку на сервере (на рисунке это SoftwareDistibution, а не Mozilla Firefox, как может показаться) и даем группе GFirefoxComputers доступ на чтение, админу - полный доступ (не компьютеру админа, а пользователю - все-таки вы должны иметь возможность по сети заливать на шару файлы ;)).
Вообще, для проверки того, как все вообще работает, можно обойтись и без группы GFirefoxComputers. Просто для того, чтобы сразу не усложнять себе жизнь, и не пенять на групповые политики, если что пойдет не так ;)
Политика правит миром!
На контроллере домена запускаем редактор групповой политики GPMC.MSC:
... и создаем связанную только с нашим OU "OU Office Computers" групповую политику под названием "Firefox 3.6.3 rus":
... редактируем нашу политику "Firefox 3.6.3 rus":
Готовим дистрибутив Firefox для развертывания в сети
В разделе "User Configuration" -> "Software settings" -> "Software Installation" щелкаем правой мышкой и создаем новый объект для установки - наш будущий инсталлятор Firefox.
Выбираем файл MSI, заботливо положенного чьими-то руками в расшаренную папку. Важно: выбирать надо сетевой путь до файла, а не локальный, ведь юзера будут получать доступ к вашей инсталляшке не локально на сервере, а по сети.
Выбираем "Assigned" (Назначенный):
На этом работа с веткой "Software Installation" закончена.
Закрываем все открытые окна на сервере (если не помешает другим задачам, естественно), Пуск -> Выполнить -> gpupdate /force
Установка на рабочих станциях
Далее достаточно просто перезагрузить рабочие станции, чтобы автоматически установился Firefox ДО того, как появится окно для ввода логина/пароля. Иными словами, пользователь будет не в силах чего-то не установить, забыть и пр. Поэтому этот способ так хорош. Вы удаленно решаете, что будет установлено / обновлено на рабочих станциях.
Windows XP бывает не с первой перезагрузки "принимает" нове политики, поэтому можно подойти к юзеру, выполнить команду "gpupdate /force" (не обязательно под админом) и перезагрузить его компьютер.
Обязательно проверьте установку на своем / тестовом компьютере ДО того, как юзеры придут следующим утром, включат компьютеры... а вдруг косяк? Поэтому хотя бы первый раз сначала испытайте на себе.
Дополнительно
Теперь на любой новый компьютер, введенный в состав подразделения OU Office Computers будет установлена последняя версия броузера Firefox. Вам даже не придется ничего делать. Просто и очень полезно. Таким же образом можно устанавливать практически любой софт, включая Adobe Reader, Adobe Flash Player (которые в обычной ситуации требуют административных прав для установки), The Bat... да мало ли софта у вас в локальной сети, поддерживать который в актуальном состоянии одна из обязанностей системного администратора.
Нюанс: если вы уже установили какой-либо пакет, в нашем случае Firefox
3.6.3 rus, а через некоторое время вам потребуется его обновить (т.к.
рано или поздно выйдет новая версия броузера), сначала удалите политику
по установке Firefox 3.6.3, после чего создайте новую. Потом "gpudate
/force" и вперед!
(c)
RightJS создан для server-side разработчиков работающих с динамическими языками и
представляет собой простую но хорошо структурированную систему, где все небоходимое
всегда быстро доступно и легко изменяемо.
С одной стороны RightJS имеет очень простой, легко понятный синтаксис, доступный
даже новичкам. С другой, RightJS поддерживает несколько парадигм разработки,
имеет расширенные возможности для объектно-ориентированного и функционального
программирований, а так же множество прочих продвинутых вещей способных осчастливить
любого профессионала.
В этой статье я продемонстрирую один из способов как прижать footer к низу страницы.
Существует много способов это сделать, но большинство из них используют
либо дополнительные хаки, либо дополнительное, не нужное количество html
тегов.
Этот метод для размещения footer внизу страницы имеет ряд
преймуществ над другими методами. Во-первых, используется всего лишь 15
строк css и минимальное количество html тегов.
Во-вторых, css код полностью валидный и корректно работает IE5++,
Firefox, Safari, Opera.
Далее
Это руководство описывает, как настроить репликацию базы данных в MySQL с использованием SSL соединение для шифрования.
MySQL репликация синхронизирует базу данных, что позволяет иметь точную
копию БД на другом сервере. Все обновления БД на главном сервере
автоматически реплицируются на другой сервер, что позволяет защитить
базу от аппаратных сбоев. В этой статье будет показано, как реализовать
репликации БД exampledb с сервера server1.example.com(ip адресом
192.168.0.100) на сервер server2.example.com(ip адресом 192.168.0.101) с
использованием SSL соединения
Оба сервера работают на Debian Lenny но конфигурация может применяться
практически на всех дистрибутивах без изменений. БД exampledb с
таблицами и данными уже существующих только на главном. Все команды
выполняются с привилегиями пользователя root.
Если на обоих серверах не установлен сервер MySQL то приступим к
инсталляции, выполнив на главном и на вторичном сервере команду:
aptitude install mysql-server mysql-client
Вам будет предложено ввести пароль root для MySQL, как на главном так и на вторичном сервере.
Теперь проверим поддержку соединения по протоколу SSL с MySQL. Давайте войдем в MySQL и введем команду в командной строке MySQL:
mysql -u root -p
mysql> show variables like '%ssl%';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+---------------+----------+
7 rows in set (0.00 sec)
mysql>quit;
Если вывод выглядит следующим образом то это означает что MySQL был
скомпилирован с поддежкой SSL, но в у нас как видно из таблици
have_openssl DISABLED и have_ssl DISABLED не активен.
Что бы включить поддержку SSL нужно отредактировать файл my.cnf который расположен в /etc/mysql/
vi /etc/mysql/my.cnf
Найдите строки * Security Features и добавьте строку ssl
[...]
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
ssl
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
[...]
Перезапустим MySQL:
/etc/init.d/mysql restart
и проверим активена ли поддержка ssl
mysql -u root -p
show variables like '%ssl%';
mysql> show variables like '%ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+---------------+-------+
7 rows in set (0.00 sec)
mysql>quit;
Вывод показывает что ssl включен.
Далее настроить MySQL для прослушивался на всех интерфейсах,
закоментировав строчку bind-address = 127.0.0.1 в /etc/mysql/my.cnf:
server1:
vi /etc/mysql/my.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
[...]
рестар MySQL:
/etc/init.d/mysql restart
Теперь посмотрим что висит у нас на портах:
netstat -tap | grep mysql
server1:~# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 3771/mysqld
server1:~#
Видимо что MySQL транслируется на всех интерфейсах.
Теперь нам необходимо создать CA, серверов и клиентских сертификатов,
для SSL соединений. Я создаю их обычно в каталоге /etc/mysql/newcerts
Создадим каталог newcerts:
mkdir /etc/mysql/newcerts && cd /etc/mysql/newcerts
Убедимся что OpenSSL унас установлен:
aptitude install openssl
Создаем CA сертификат:
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem
Далее создаем сертификат для сервера…:
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem
и для клиента:
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
Вывод должен выглядеть следующим образом:
ls -l
server1:/etc/mysql/newcerts# ls -l
total 32
-rw-r--r-- 1 root root 1346 2010-08-18 20:13 ca-cert.pem
-rw-r--r-- 1 root root 1675 2010-08-18 20:13 ca-key.pem
-rw-r--r-- 1 root root 1099 2010-08-18 20:14 client-cert.pem
-rw-r--r-- 1 root root 1675 2010-08-18 20:14 client-key.pem
-rw-r--r-- 1 root root 956 2010-08-18 20:14 client-req.pem
-rw-r--r-- 1 root root 1099 2010-08-18 20:14 server-cert.pem
-rw-r--r-- 1 root root 1679 2010-08-18 20:14 server-key.pem
-rw-r--r-- 1 root root 956 2010-08-18 20:14 server-req.pem
server1:/etc/mysql/newcerts#
Теперь мы должны передать сертификаты ca-cert.pem, client-cert.pem и
client-key.pem на второй сервер. Создадим директорию на втором сервере:
server2:
mkdir /etc/mysql/newcerts
Вернемся на server1 и передадим сертификаты следующим образом:
server1:
scp /etc/mysql/newcerts/ca-cert.pem root@192.168.0.101:/etc/mysql/newcerts
scp /etc/mysql/newcerts/client-cert.pem root@192.168.0.101:/etc/mysql/newcerts
scp /etc/mysql/newcerts/client-key.pem root@192.168.0.101:/etc/mysql/newcerts
Далее откроем на server1 /etc/mysql/my.cnf и внесем изменения в область *
Security Features раскоментировав строки ssl-ca, ssl-cert и ssl-key:
vi /etc/mysql/my.cnf
[...]
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
ssl
ssl-ca=/etc/mysql/newcerts/ca-cert.pem
ssl-cert=/etc/mysql/newcerts/server-cert.pem
ssl-key=/etc/mysql/newcerts/server-key.pem
[...]
Перезапустим MySQL:
/etc/init.d/mysql restart
Теперь мы создадим slave_user пользователя репликации, который будет
использоваться на server2, для доступа к базе данных на server1
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password' REQUIRE SSL;
Сторока REQUIRE SSL не является обязательной, если Вы оставите ее,
slave_user будет разрешено подключатся через зашифрованное и не
зашифрованное соединение. При использовании SSL разрешено будет только
зашифрованное соединение.
(Если пользователь репликации уже создан и нужно указать только SSL соединение то нужно изменить пользователя следующим образом:
GRANT USAGE ON *.* TO 'slave_user'@'%' REQUIRE SSL;
)
FLUSH PRIVILEGES;
quit;
Кроме того мы должны MySQL указать где хранить наши логи для репликации,
а также укащать какой сервер является главным а какой репликационным:
vi /etc/mysql/my.cnf
[...]
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = exampledb
[...]
Рестарт MySQL
/etc/init.d/mysql restart
Далее нам нужно провести несколько операций:
1. Заблокировать базу exampledb на server1
2. Узнать master status server1
3. Создать дамп SQL exampledb (для импорта на server2)
4. Разблокировать нашу базу
mysql -u root -p
USE exampledb;
FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | exampledb | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql>
Теперь не выходя из консоли mysql(т.к. блокировка бд будет удалена) мы сделаем бекап и перенесем его на server2
server1:
cd /tmp
mysqldump -u root -pyourrootsqlpassword --opt exampledb > snapshot.sql
scp snapshot.sql root@192.168.0.101:/tmp
После проделаной операции можно смело разблокировать нашу БД
server1:
UNLOCK TABLES;
quit;
На этом настройка server1 завершена. Приступим к настройке server2 открыв конфиг мускуля:
server2:
vi /etc/mysql/my.cnf
убедимся что у нас есть следующие настройки строки(если их нет то добавим):
[...]
server-id=2
master-connect-retry=60
replicate-do-db=exampledb
[...]
Значение server-id=2 уникальное и оно должно отличатся от значения которое на server1
Перезапустим MySQL:
/etc/init.d/mysql restart
Прежде чем начать настройку репликации создадим пустую БД:
mysql -u root -p
CREATE DATABASE exampledb;
quit;
Теперь можно импортировать на server2 дамп базы snapshot.sql
/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave
cd /tmp
mysql -u root -pyourrootsqlpassword exampledb < snapshot.sql
Заходим в MySQL и выполним команду, что бы server2 был вторичным сервером, а server1 определялся как первычный сервер:
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98, MASTER_SSL=1, MASTER_SSL_CA = '/etc/mysql/newcerts/ca-cert.pem', MASTER_SSL_CERT = '/etc/mysql/newcerts/client-cert.pem', MASTER_SSL_KEY = '/etc/mysql/newcerts/client-key.pem';
* MASTER_HOST — ip адрес или имя хоста в нашем случае это ip
* MASTER_USER — пользователь репликации для первичного сервера
* MASTER_PASSWORD — Пароль пользователя
* MASTER_LOG_FILE — Значение Лог файла на server1 которое мы узнали выполним команду SHOW MASTER STATUS;
* MASTER_LOG_POS — Значение полученное при выполнении команды SHOW MASTER STATUS;
* MASTER_SSL — Создает соединение главного и вторичного сервера с использованием SSL
* MASTER_SSL_CA — Путь к сертификату CA (server2)
* MASTER_SSL_CERT — Путь к сертификату client-cert.pem (server2)
* MASTER_SSL_KEY — Путь к сертификату client-key.pem (server2)
И наконец
START SLAVE;
Теперь проверим статус server2
SHOW SLAVE STATUS \G
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: exampledb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/newcerts/ca-cert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /etc/mysql/newcerts/client-cert.pem
Master_SSL_Cipher:
Master_SSL_Key: /etc/mysql/newcerts/client-key.pem
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
mysql>
После этого можно выйти с MySQL:
quit;
Вот и все, настройка серверов закончена. Если Вы сделали все верно то репликация настроена правильно и работоспособна.
Большое спасибо за внимание!
P.S. Если вы нашли очепятку или не правильно сформулированное предложение сообщите пожалуйста в ЛС.
To change the background color of the special headers in Search and CD-Creator put something like the following in your gtkrc:
style "extra-view-widgets"
{
# Fx. The special header in Nautilus Search and CD Creator
bg[NORMAL] = "#CD6127"
}
widget "*.nautilus-extra-view-widget" style:highest "extra-view-widgets"