Как записать, что двоичный файл Mysql регистрирует положение ведущего устройства при выполнении mysqldump от ведомого устройства?

Я не думаю, что существует любой способ сделать это в Python. Когда закрытие определяется, текущее состояние переменных в объеме включения получено и больше не имеет непосредственно referenceable имя (снаружи закрытия). Если бы необходимо было звонить foo() снова, новое закрытие имело бы различный набор переменных от объема включения.

В Вашем простом примере, Вы могли бы быть более обеспеченным использованием класса:

class foo:
        def __init__(self):
                self.var_a = 2
                self.var_b = 3

        def __call__(self, x):
                return self.var_a + self.var_b + x

localClosure = foo()

# Local closure is now "return 2 + 3 + x"
a = localClosure(1) # 2 + 3 + 1 == 6

# DO SOME MAGIC HERE TO TURN "var_a" of the closure into 0
# ...but what magic? Is this even possible?
localClosure.var_a = 0

# Local closure is now "return 0 + 3 + x"
b = localClosure(1) # 0 + 3 +1 == 4

, Если бы Вы используете эту технику, я больше не использовал бы имя localClosure, потому что это больше не на самом деле закрытие. Однако это работает то же один.

7
задан wbharding 5 October 2009 в 23:51
поделиться

2 ответа

Следующий сценарий оболочки будет запускаться в cron или периодически, при необходимости заменяйте переменные (значения по умолчанию написаны для FreeBSD):

# MySQL executable location
mysql=/usr/local/bin/mysql

# MySQLDump location
mysqldump=/usr/local/bin/mysqldump

# MySQL Username and password
userpassword=" --user=<username> --password=<password>"

# MySQL dump options
dumpoptions=" --quick --add-drop-table --add-locks --extended-insert"

# Databases
databases="db1 db2 db3"

# Backup Directory
backupdir=/usr/backups

# Flush and Lock
mysql $userpassword -e 'STOP SLAVE SQL_THREAD;'

set `date +'%Y %m %d'`

# Binary Log Positions
masterlogfile=`$mysql $userpassword -e 'SHOW SLAVE STATUS \G' | grep '[^_]Master_Log_File'`
masterlogpos=`$mysql $userpassword -e 'SHOW SLAVE STATUS \G' | grep 'Read_Master_Log_Pos'`

# Write Binlog Info
echo $masterlogfile >> ${backupdir}/info-$1-$2-$3.txt
echo $masterlogpos >> ${backupdir}/info-$1-$2-$3.txt

# Dump all of our databases
echo "Dumping MySQL Databases"
for database in $databases
do
$mysqldump $userpassword $dumpoptions $database | gzip - > ${backupdir}/${database}-$1-$2-$3.sql.gz
done

# Unlock
$mysql $userpassword -e 'START SLAVE'

echo "Dump Complete!"

exit 0
8
ответ дан 7 December 2019 в 03:18
поделиться

Второй вариант выглядит правильным.

Мне нужно было придумать способ делать дифференциальные резервные копии с помощью mysqldump. В итоге я написал сценарий, который выбирал, какие базы данных нужно резервировать, а затем запускал mysqldump. Не могли бы вы создать сценарий, который выполнял бы шаги, указанные в http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_master-data , и вызвать его из cron задание?

  1. подключиться к mysql и "остановить подчиненное устройство"
  2. выполнить SHOW SLAVE STATUS
  3. сохранить имя_файла, значение_файла в переменных
  4. дамп и перезапустить подчиненное устройство.

Просто мысль, но я предполагаю, что вы может добавить строку «CHANGE MASTER TO» в файл дампа, и он будет выполнен, когда вы восстановите / настроите новое ведомое устройство.

0
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: