Синхронизация master и slave MySQL, несмотря на конфликтные запросы |
[исправить] |
Иногда возникает необходимость догнать мастер несмотря на конфликтные запросы из relay-лога.
Вместо того чтобы, для разрешения конфликтов, вручную выполнять 2 команды
можно в крайних ситуациях использовать скрипт:
#!/bin/sh
n=1
until [ $n = "0" ];do
n=`mysql -Be 'show slave status \G' | grep Seconds_Behind_Master| cut -f2 -d: | tr -d " "`
echo $n;
if [ $n = "NULL" ]; then
mysql -Be ' SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; start slave;'
fi;
sleep 1
done
Для быстрой и полной синхронизации небольшой таблицы:
(http://www.mysqlperformanceblog.com/2008/06/29/resyncing-table-on-mysql-slave/)
LOCK TABLE tbl WRITE;
SELECT * FROM table INTO OUTFILE '/tmp/tbl.txt';
DELETE FROM tbl;
LOAD DATA INFILE 'tmp/tbl.txt' INTO TABLE tbl;
UNLOCK TABLES;
Другой вариант:
RENAME TABLE rep TO rep_maint;
SELECT * FROM rep_maint INTO OUTFILE '/tmp/rep.txt';
CREATE TABLE rep_new LIKE rep_maint;
LOAD DATA INFILE '/tmp/rep.txt' INTO TABLE rep_new;
RENAME TABLE rep_maint TO rep_old, rep_new TO rep;
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / SQL и базы данных / MySQL специфика / Оптимизация и администрирование MySQL |