Как я делаю резервные копии в MySQL? [дубликат]

Вы можете попробовать это:

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)
26
задан Thomas Owens 5 September 2008 в 18:51
поделиться

15 ответов

Вы могли бы хотеть посмотреть возрастающие резервные копии .

13
ответ дан 28 November 2019 в 07:02
поделиться

Кажитесь, что Вы говорите о транзакции, откатывают.

Так с точки зрения того, в чем Вы нуждаетесь, если у Вас есть журналы, содержащие все исторические запросы, который уже не является резервным копированием? Почему Вам нужно инкрементное резервное копирование, которое является в основном избыточной копией всей информации в журналах DB?

Если так, почему Вы только не используете mysqldump и делаете резервное копирование каждый однажды некоторое время?

0
ответ дан 28 November 2019 в 07:02
поделиться

@Daniel,

в случае, если Вам все еще интересно, существует довольно новое (плохо мне знакомое) решение, совместно использованное Paul Galbraith , инструмент, который допускает резервное копирование онлайн innodb таблиц, названных ibbackup от оракула, чтобы заключить Paul в кавычки,

, когда используется в сочетании с innobackup, работал отлично в создании ночного резервного копирования без времени простоя во время резервного копирования

[еще 118], деталь может быть найдена на блог

Paul

0
ответ дан 28 November 2019 в 07:02
поделиться

Двоичные журналы являются, вероятно, корректным способом сделать возрастающие резервные копии, но если Вы не полагаете, что форматы двоичного файла для постоянного хранения вот являются ASCII способ сделать возрастающие резервные копии.

mysqldump не является неверным форматом, основная проблема состоит в том, что он производит, наполняют таблицу как одну большую строку. Следующий тривиальный sed разделит свой вывод вдоль рекордных границ:

mysqldump - выбирают-p | sed-e "s/, (/,\n (/g"> database.dump

получающийся файл является довольно различно-дружественным, и я сохранял их в стандартном репозитории SVN справедливо успешно. Это также позволяет Вам сохранять историю резервных копий, если Вы находите, что последняя версия получила borked, и Вам нужна версия прошлой недели.

1
ответ дан 28 November 2019 в 07:02
поделиться

корректный способ выполнить возрастающие или непрерывные резервные копии mysql сервера с двоичными журналами.

для начала, блокировка все таблицы или снижают сервер. используйте дамп mysql, чтобы сделать резервное копирование, или просто скопировать каталог данных. только необходимо сделать это однажды, или любое время, Вы хотите Полное резервное копирование.

перед возвращением сервера удостоверьтесь, что двоичный вход включен.

для взятия инкрементного резервного копирования войдите в систему сервера и дайте команду FLUSH LOGS. тогда скопируйте последний раз закрытый двоичный файл журнала.

, если у Вас есть все innodb таблицы, более просто просто использовать inno горячее резервное копирование (не свободный) или mysqldump с - опция единственной транзакции (у Вас должна быть большая память для обработки транзакций).

1
ответ дан 28 November 2019 в 07:02
поделиться

Проблема с прямым резервным копированием mysql папки базы данных состоит в том, что резервное копирование не обязательно будет последовательно, если Вы не сделаете блокировку записи во время резервного копирования.

я выполняю сценарий, который выполняет итерации через все базы данных, делая mysqldump и gzip на каждом к резервной папке, и затем скопируйте ту папку для записи на ленту.

Это, однако, означает, что нет такой вещи как возрастающая резервные копии, так как ночной дамп является полным дампом. Но я утверждал бы, что это могло быть хорошей вещью, начиная с восстановления от , полное резервное копирование будет значительно более быстрым процессом, чем восстановление от incrementals - и если Вы создадите резервную копию для записи на ленту, это будет, вероятно, означать собирать много лент, прежде чем можно будет сделать полное восстановление.

В любом случае, какой бы ни план резервного копирования Вы идете с, удостоверяются, что сделали испытательное восстановление, чтобы гарантировать, что он работает, и поймите то, сколько времени он мог бы взять, и точно что шаги - то, что необходимо пройти.

1
ответ дан 28 November 2019 в 07:02
поделиться

@Jake,

спасибо за информацию Теперь, похоже, что только коммерческая версия имеет функции резервного копирования.

там НИЧТО встроенное в MySQL, чтобы сделать достойные резервные копии?

официальная страница MySQL даже рекомендует вещи как "хорошо, можно скопировать файлы, пока ОНИ НЕ ОБНОВЛЯЮТСЯ"...

1
ответ дан 28 November 2019 в 07:02
поделиться

Я использую простой сценарий, который выводит 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()
3
ответ дан 28 November 2019 в 07:02
поделиться

Вы могли бы хотеть добавить свою текущую офлайновую резервную схему с репликация MySQL .

Тогда, если у Вас есть отказ оборудования, можно просто подкачать машины. При ловле отказа быстро, Вы - пользователи, даже не заметит времени простоя или потери данных.

3
ответ дан 28 November 2019 в 07:02
поделиться

Я использую mysqlhotcopy, быстрая утилита горячего резервного копирования онлайн для локальных баз данных MySQL и таблиц . Я довольно доволен им.

4
ответ дан 28 November 2019 в 07:02
поделиться

теперь я начинаю походить на торговца для этого продукта. я ответил на вопрос с ним здесь , тогда я ответил на другого с ним снова здесь .

, короче говоря попробуйте sqlyog (предприятие в Вашем случае) от webyog для всех Ваших mysql требований. это не [только 113] резервные копии расписаний , но также и синхронизация расписаний , таким образом, можно на самом деле копировать базу данных в удаленный сервер.

это имеет свободный выпуск сообщества, а также версию для предприятий. я рекомендую позже Вам, хотя я также reccomend Вы запускаю с выпуска коммуникации, и сначала видят, как Вам нравится он .

7
ответ дан 28 November 2019 в 07:02
поделиться

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/

11
ответ дан 28 November 2019 в 07:02
поделиться

Можно сделать полные дампы баз данных/таблиц InnoDB, не блокируя (время простоя) через mysqldump с "-единственную транзакцию - таблицы блокировки пропуска" опции. Работы хорошо для того, чтобы делать еженедельные снимки + ежедневно/каждый час двоичный файл регистрируют инкременты (#Using Двоичный Журнал для Включения Возрастающих Резервных копий).

2
ответ дан 28 November 2019 в 07:02
поделиться

ребята из Percona сделали альтернативу innobackup с открытым исходным кодом ...

Xtrabackup

https://launchpad.net/percona-xtrabackup/

Прочтите эту статью о XtraDB http://www.linux-mag.com/cache/7356/1.html

4
ответ дан 28 November 2019 в 07:02
поделиться

Это довольно надежное решение для оболочки Linux. Я использую его в течение многих лет:

http://sourceforge.net/projects/automysqlbackup/

  • Выполняет скользящее резервное копирование: ежедневно, ежемесячно, ежегодно
  • Множество опций
1
ответ дан 28 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

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