Вы можете попробовать это:
C = ['A','B', 'A','A','B','B','B','X','B']
D = ['A','B','B','Y']
res = [ i for i in C ]
for i in D:
if i in C:
res.remove(i)
print(res)
Вы могли бы хотеть посмотреть возрастающие резервные копии .
Кажитесь, что Вы говорите о транзакции, откатывают.
Так с точки зрения того, в чем Вы нуждаетесь, если у Вас есть журналы, содержащие все исторические запросы, который уже не является резервным копированием? Почему Вам нужно инкрементное резервное копирование, которое является в основном избыточной копией всей информации в журналах DB?
Если так, почему Вы только не используете mysqldump и делаете резервное копирование каждый однажды некоторое время?
@Daniel,
в случае, если Вам все еще интересно, существует довольно новое (плохо мне знакомое) решение, совместно использованное Paul Galbraith , инструмент, который допускает резервное копирование онлайн innodb таблиц, названных ibbackup от оракула, чтобы заключить Paul в кавычки,
[еще 118], деталь может быть найдена на блог, когда используется в сочетании с innobackup, работал отлично в создании ночного резервного копирования без времени простоя во время резервного копирования
Paul
Двоичные журналы являются, вероятно, корректным способом сделать возрастающие резервные копии, но если Вы не полагаете, что форматы двоичного файла для постоянного хранения вот являются ASCII способ сделать возрастающие резервные копии.
mysqldump не является неверным форматом, основная проблема состоит в том, что он производит, наполняют таблицу как одну большую строку. Следующий тривиальный sed разделит свой вывод вдоль рекордных границ:
mysqldump - выбирают-p | sed-e "s/, (/,\n (/g"> database.dump
получающийся файл является довольно различно-дружественным, и я сохранял их в стандартном репозитории SVN справедливо успешно. Это также позволяет Вам сохранять историю резервных копий, если Вы находите, что последняя версия получила borked, и Вам нужна версия прошлой недели.
корректный способ выполнить возрастающие или непрерывные резервные копии mysql сервера с двоичными журналами.
для начала, блокировка все таблицы или снижают сервер. используйте дамп mysql, чтобы сделать резервное копирование, или просто скопировать каталог данных. только необходимо сделать это однажды, или любое время, Вы хотите Полное резервное копирование.
перед возвращением сервера удостоверьтесь, что двоичный вход включен.
для взятия инкрементного резервного копирования войдите в систему сервера и дайте команду FLUSH LOGS. тогда скопируйте последний раз закрытый двоичный файл журнала.
, если у Вас есть все innodb таблицы, более просто просто использовать inno горячее резервное копирование (не свободный) или mysqldump с - опция единственной транзакции (у Вас должна быть большая память для обработки транзакций).
Проблема с прямым резервным копированием mysql папки базы данных состоит в том, что резервное копирование не обязательно будет последовательно, если Вы не сделаете блокировку записи во время резервного копирования.
я выполняю сценарий, который выполняет итерации через все базы данных, делая mysqldump и gzip на каждом к резервной папке, и затем скопируйте ту папку для записи на ленту.
Это, однако, означает, что нет такой вещи как возрастающая резервные копии, так как ночной дамп является полным дампом. Но я утверждал бы, что это могло быть хорошей вещью, начиная с восстановления от , полное резервное копирование будет значительно более быстрым процессом, чем восстановление от incrementals - и если Вы создадите резервную копию для записи на ленту, это будет, вероятно, означать собирать много лент, прежде чем можно будет сделать полное восстановление.
В любом случае, какой бы ни план резервного копирования Вы идете с, удостоверяются, что сделали испытательное восстановление, чтобы гарантировать, что он работает, и поймите то, сколько времени он мог бы взять, и точно что шаги - то, что необходимо пройти.
@Jake,
спасибо за информацию Теперь, похоже, что только коммерческая версия имеет функции резервного копирования.
там НИЧТО встроенное в MySQL, чтобы сделать достойные резервные копии?
официальная страница MySQL даже рекомендует вещи как "хорошо, можно скопировать файлы, пока ОНИ НЕ ОБНОВЛЯЮТСЯ"...
Я использую простой сценарий, который выводит mysql базу данных в tar.gz файл, шифрует ее с помощью gpg и посылает ее на почтовый счет (Почта Google, но это не важно действительно)
, сценарий является сценарием Python, который в основном выполняет следующую команду и посылает выходной файл по электронной почте.
mysqldump -u theuser -p mypassword thedatabase | gzip -9 - | gpg -e -r 12345 -r 23456 > 2008_01_02.tar.gz.gpg
Это - все резервное копирование. Это также имеет веб-резервную часть, который просто tar/gzips/encrypts файлы. Это - довольно небольшой сайт, таким образом, веб-резервные копии составляют намного меньше чем 20 МБ, так может быть послан на счет Gmail без проблемы (дампы MySQL являются крошечными, сжатых приблизительно 300 КБ). Это является чрезвычайно основным, и не масштабируется очень хорошо. Я выполняю его один раз в неделю использование крона.
я не совсем уверен, как мы, как предполагается, помещаем длинноватые сценарии в ответы, таким образом, я просто пихну его как блок кода..
#!/usr/bin/env python
#encoding:utf-8
#
# Creates a GPG encrypted web and database backups, and emails it
import os, sys, time, commands
################################################
### Config
DATE = time.strftime("%Y-%m-%d_%H-%M")
# MySQL login
SQL_USER = "mysqluser"
SQL_PASS = "mysqlpassword"
SQL_DB = "databasename"
# Email addresses
BACKUP_EMAIL=["email1@example.com", "email2@example.com"] # Array of email(s)
FROM_EMAIL = "root@myserver.com" # Only one email
# Temp backup locations
DB_BACKUP="/home/backupuser/db_backup/mysite_db-%(date)s.sql.gz.gpg" % {'date':DATE}
WEB_BACKUP="/home/backupuser/web_backup/mysite_web-%(date)s.tar.gz.gpg" % {'date':DATE}
# Email subjects
DB_EMAIL_SUBJECT="%(date)s/db/mysite" % {'date':DATE}
WEB_EMAIL_SUBJECT="%(date)s/web/mysite" % {'date':DATE}
GPG_RECP = ["MrAdmin","MrOtherAdmin"]
### end Config
################################################
################################################
### Process config
GPG_RECP = " ".join(["-r %s" % (x) for x in GPG_RECP]) # Format GPG_RECP as arg
sql_backup_command = "mysqldump -u %(SQL_USER)s -p%(SQL_PASS)s %(SQL_DB)s | gzip -9 - | gpg -e %(GPG_RECP)s > %(DB_BACKUP)s" % {
'GPG_RECP':GPG_RECP,
'DB_BACKUP':DB_BACKUP,
'SQL_USER':SQL_USER,
'SQL_PASS':SQL_PASS,
'SQL_DB':SQL_DB
}
web_backup_command = "cd /var/www/; tar -c mysite.org/ | gzip -9 | gpg -e %(GPG_RECP)s > %(WEB_BACKUP)s" % {
'GPG_RECP':GPG_RECP,
'WEB_BACKUP':WEB_BACKUP,
}
# end Process config
################################################
################################################
### Main application
def main():
"""Main backup function"""
print "Backing commencing at %s" % (DATE)
# Run commands
print "Creating db backup..."
sql_status,sql_cmd_out = commands.getstatusoutput(sql_backup_command)
if sql_status == 0:
db_file_size = round(float( os.stat(DB_BACKUP)[6] ) /1024/1024, 2) # Get file-size in MB
print "..successful (%.2fMB)" % (db_file_size)
try:
send_mail(
send_from = FROM_EMAIL,
send_to = BACKUP_EMAIL,
subject = DB_EMAIL_SUBJECT,
text = "Database backup",
files = [DB_BACKUP],
server = "localhost"
)
print "Sending db backup successful"
except Exception,errormsg:
print "Sending db backup FAILED. Error was:",errormsg
#end try
# Remove backup file
print "Removing db backup..."
try:
os.remove(DB_BACKUP)
print "...successful"
except Exception, errormsg:
print "...FAILED. Error was: %s" % (errormsg)
#end try
else:
print "Creating db backup FAILED. Output was:", sql_cmd_out
#end if sql_status
print "Creating web backup..."
web_status,web_cmd_out = commands.getstatusoutput(web_backup_command)
if web_status == 0:
web_file_size = round(float( os.stat(WEB_BACKUP)[6] ) /1024/1024, 2) # File size in MB
print "..successful (%.2fMB)" % (web_file_size)
try:
send_mail(
send_from = FROM_EMAIL,
send_to = BACKUP_EMAIL,
subject = WEB_EMAIL_SUBJECT,
text = "Website backup",
files = [WEB_BACKUP],
server = "localhost"
)
print "Sending web backup successful"
except Exception,errormsg:
print "Sending web backup FAIELD. Error was: %s" % (errormsg)
#end try
# Remove backup file
print "Removing web backup..."
try:
os.remove(WEB_BACKUP)
print "...successful"
except Exception, errormsg:
print "...FAILED. Error was: %s" % (errormsg)
#end try
else:
print "Creating web backup FAILED. Output was:", web_cmd_out
#end if web_status
#end main
################################################
################################################
# Send email function
# needed email libs..
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
def send_mail(send_from, send_to, subject, text, files=[], server="localhost"):
assert type(send_to)==list
assert type(files)==list
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = COMMASPACE.join(send_to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )
for f in files:
part = MIMEBase('application', "octet-stream")
try:
part.set_payload( open(f,"rb").read() )
except Exception, errormsg:
raise IOError("File not found: %s"%(errormsg))
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
msg.attach(part)
#end for f
smtp = smtplib.SMTP(server)
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.close()
#end send_mail
################################################
if __name__ == '__main__':
main()
Вы могли бы хотеть добавить свою текущую офлайновую резервную схему с репликация MySQL .
Тогда, если у Вас есть отказ оборудования, можно просто подкачать машины. При ловле отказа быстро, Вы - пользователи, даже не заметит времени простоя или потери данных.
Я использую mysqlhotcopy, быстрая утилита горячего резервного копирования онлайн для локальных баз данных MySQL и таблиц . Я довольно доволен им.
теперь я начинаю походить на торговца для этого продукта. я ответил на вопрос с ним здесь , тогда я ответил на другого с ним снова здесь .
, короче говоря попробуйте sqlyog (предприятие в Вашем случае) от webyog для всех Ваших mysql требований. это не [только 113] резервные копии расписаний , но также и синхронизация расписаний , таким образом, можно на самом деле копировать базу данных в удаленный сервер.
это имеет свободный выпуск сообщества, а также версию для предприятий. я рекомендую позже Вам, хотя я также reccomend Вы запускаю с выпуска коммуникации, и сначала видят, как Вам нравится он .
mysqldump является разумным подходом, но примите во внимание, что для некоторых механизмов, это заблокирует Ваши таблицы на время дампа - и это имеет опасения доступности за большие производственные наборы данных.
очевидная альтернатива этому является mk-parallel-dump от Maatkit ( http://www.maatkit.org/ ), который необходимо действительно проверить, если Вы - mysql администратор. Это выводит несколько таблиц или баз данных в параллели с помощью mysqldump, таким образом, уменьшая сумму общего времени, которое занимает дамп.
, Если Вы работаете в дублируемой установке (и если Вы используете MySQL для важных данных в производстве, у Вас нет оправданий не сделать так), беря дампы от ведомого устройства репликации, выделенного цели, будет препятствовать тому, чтобы любые проблемы блокировки доставили неприятности.
следующая очевидная альтернатива - на Linux, по крайней мере - должна использовать снимки LVM. Можно заблокировать таблицы, создать снимки файловую систему и разблокировать таблицы снова; тогда запустите дополнительный MySQL с помощью монтирования того снимка, выведя оттуда. Этот подход описан здесь: http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/
Можно сделать полные дампы баз данных/таблиц InnoDB, не блокируя (время простоя) через mysqldump с "-единственную транзакцию - таблицы блокировки пропуска" опции. Работы хорошо для того, чтобы делать еженедельные снимки + ежедневно/каждый час двоичный файл регистрируют инкременты (#Using Двоичный Журнал для Включения Возрастающих Резервных копий).
ребята из Percona сделали альтернативу innobackup с открытым исходным кодом ...
Xtrabackup
https://launchpad.net/percona-xtrabackup/
Прочтите эту статью о XtraDB http://www.linux-mag.com/cache/7356/1.html
Это довольно надежное решение для оболочки Linux. Я использую его в течение многих лет:
http://sourceforge.net/projects/automysqlbackup/