+380(66)433-69-36 | |
+380(66)433-69-36 | |
+380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу
MySQL синхронизируем права с разных серверов
Синхронизация баз данных MySQL уже в достаточной мере описана и здесь она рассматриваться не будет. В этом материале речь пойдет об объединении учетных записей пользователей и их прав доступа с разных серверов. Когда может появится такая необходимость? ну во-первых когда мы хотим сделать репликацию между уже существующими серверами - а у нас на них зоопарк - т.е. права и базы весьма различаются. Во-вторых когда по какой-то причине репликация между серверами была прервана и за время перерыва возникли различия. В третьих - если мы вдруг захотим сделать один подчиненный сервер с множества мастеров. Можно еще придумать варианты применения... но ближе к делу. Итак, имеем: 2 сервера с зоопарком пользователей и баз.У нас есть все необходмые права к базе данных чтобы прочитать права пользователей и их данные.
host_1="10.30.0.1"
host_2="10.30.0.2"
SUPERUSER='root'
echo -n 'Username:('${SUPERUSER}'):'; read inp
if [ "$inp" != "" ];then SUPERUSER=$inp ; fi;unset inp;
echo -n 'Password:' ;stty -echo ;read inp;stty echo
if [ "$inp" != "" ];then SUPERPASS=$inp; fi
SAVEIFS=$IFS
IFS='
'
if [ "${SUPERUSER}" = "" ]; then
echo "Please specify the username of mysql."
echo "Usage: exportsqlusers root pass"
exit 1
fi
if [ "${SUPERPASS}" = "" ]; then
echo "Please specify the password of mysql."
echo "Usage: exmportsqlusers root pass"
exit 1
fi
rm -f script.sql
rm -f script_final.sql
for HoSt in $host_1 $host_2 ;do
SCHEMA=`mysql -u ${SUPERUSER} -B -N -p"${SUPERPASS}" -h "$HoSt" -e "SELECT distinct SCHEMA_NAME FROM SCHEMATA where SCHEMA_NAME not in (\"information_schema\",\"mysql\",\"performance_schema\")" information_schema`
for SCHEMA_DB in ${SCHEMA}; do
echo "create database if not exists \'${SCHEMA_DB}\'"\;>>script_final.sql
done
USERS_HOSTS=`mysql -u ${SUPERUSER} -B -N -p"${SUPERPASS}" -h "$HoSt" -e "SELECT user, host FROM user where user not in (\"root\",\"debian-sys-main\")" mysql`
for USER_HOST in ${USERS_HOSTS}; do
NULL_STRING=0 #индикатор пустой строки
#echo ${USER_HOST}
USER=`echo ${USER_HOST} | awk '{print $1}'`
#echo user: ${USER}
HOST=`echo ${USER_HOST} | awk '{print $2}'`
#echo host: ${HOST}
if [ "${USER}" = "" ]; then
NULL_STRING=1
fi
if [ "${HOST}" = "" ]; then
NULL_STRING=1
fi
if [ "${NULL_STRING}" = "0" ]; then
SQL_QUERIES=`mysql -u "${SUPERUSER}" -p"${SUPERPASS}" -B -N -h "$HoSt" -e"SHOW GRANTS FOR '${USER}'@'${HOST}'"`
for SQL_QUERY in ${SQL_QUERIES}; do
echo ${SQL_QUERY}\; >> script.sql
#echo -----------------------------------------
done
fi
done
done #------for all hosts
IFS=$SAVEIFS
cat script.sql| grep -v 'REPLICATION'| sort | uniq >> script_final.sql
echo "flush privileges"\; >> script_final.sql
на выходе получаем скрипт script_final.sql который запускаем на серверах примерно так:
mysql -u root -p-password="mypassword" < script_final.sql
В общем-то все. Если все отрабатывает корректно, то получаем на выходе то, что желали. На двух серверах базы данных и доступы к ним синхронизированы. Обращаем внимание, что права пользователей root и debian-sys-main исключены из скрипта - чтобы не повлиять на работоспособность серверов. Если все-таки их данные тоже нужно переносить - то необходимо снять исключение этих пользователей в коде выбора пользователей where user not in (\"root\",\"debian-sys-main\")" Если есть доступ к более чем 2-м серверам, то можно распространить работу скрипта на любое количество - создав еще одну переменную например host_3 по аналогии с host_2 и дописав его в цикл for HoSt in $host_1 $host_2 ;do
Надеюсь, приведенное решение облегчит еще кому-то кроме нас жизнь. Если будут вопросы или просьбы - мы всегда открыты для диалога.