Documentation: Backup and Restore MySQL

This commit is contained in:
cytopia 2018-04-03 14:35:16 +02:00
parent 2a4316079a
commit 3d4b3e059d
No known key found for this signature in database
GPG Key ID: 6D56EDB8695128A2
2 changed files with 303 additions and 4 deletions

View File

@ -5,7 +5,10 @@ devilbox documentation
.. image:: img/banner.png
The Devilbox allows you to have an unlimited number of projects ready without having to install
The Devilbox is a modern dockerized LAMP and MEAN stack for local development on Linux, MacOS
and Windows.
It allows you to have an unlimited number of projects ready without having to install
any external software and without having to configure any virtual hosts. As well as providing a
very flexible development stack that you can run offline. (Internet is only required to initially
pull docker container).
@ -49,9 +52,9 @@ host is ready to be served with your custom domain.
maintenance/install
maintenance/update
maintenance/uninstall
tutorials/backup-mysql
tutorials/backup-pgsql
tutorials/backup-mongo
maintenance/backup-and-restore-mysql
maintenance/backup-and-restore-pgsql
maintenance/backup-and-restore-mongo
.. toctree::

View File

@ -0,0 +1,296 @@
.. _backup_and_restore_mysql:
************************
Backup and restore MySQL
************************
Backup and restore will be necessary when you are going to switch MySQL versions.
Each version has its own data directory and is fully indepentend of other versions.
In case you want to switch to a different version, but still want to have your MySQL databases
present, you must first backup the databases of your current version and import them into the
new version.
There are multiple ways to backup and restore. Chose the one which is most convenient for you.
**Table of Contents**
.. contents:: :local:
Backup
======
There are many different options to backup your MySQL database including some for the command line
and some for using the Web interface. The recommended and fastest method is to use
``mysqldump-secure``, as it will also add info files (*.info) to each database recording checksums,
dump date, dump options as well as the server version it came from.
Mysqldump-secure
----------------
`mysqldump-secure <https://mysqldump-secure.org/>`_ is bundled, setup and ready to use in every
PHP container. You can run it without any arguments and it will dump each available database as a
separated compressed file. Backups will be located in ``./backups/mysql/`` inside the Devilbox
git directory or in ``/shared/backups/mysql/`` inside the PHP container.
To have your backups in place is just three commands away:
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Enter the PHP container
host> ./shell.sh
# Run mysqldump-secure
devilbox@php-7.1.6 in /shared/httpd $ mysqldump-secure
[INFO] (OPT): Logging enabled
[INFO] (OPT): MySQL SSL connection disabled
[INFO] (OPT): Compression enabled
[INFO] (OPT): Encryption disabled
[INFO] (OPT): Deletion disabled
[INFO] (OPT): Nagios log disabled
[INFO] (OPT): Info files enabled
[INFO] (SQL): 1/3 Skipping: information_schema (DB is ignored)
[INFO] (SQL): 2/3 Dumping: mysql (0.66 MB) 1 sec (0.13 MB)
[INFO] (SQL): 3/3 Skipping: performance_schema (DB is ignored)
[OK] Finished successfully
List backups
^^^^^^^^^^^^
Let's see where to find the backups inside the PHP container:
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Enter the PHP container
host> ./shell.sh
# Show directory output
devilbox@php-7.1.6 in /shared/httpd $ ls -l /shared/backups/mysql/
-rw-r--r-- 1 devilbox 136751 Jun 17 13:31 2017-06-17_13-31__mysql.sql.gz
-rw-r--r-- 1 devilbox 2269 Jun 17 13:31 2017-06-17_13-31__mysql.sql.gz.info
Let's do the same again and see where to find the backups in the Devilbox git directory
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Show directory output
host> ls -l backups/mysql/
-rw-r--r-- 1 cytopia 136751 Jun 17 13:31 2017-06-17_13-31__mysql.sql.gz
-rw-r--r-- 1 cytopia 2269 Jun 17 13:31 2017-06-17_13-31__mysql.sql.gz.info
``*.info`` files
^^^^^^^^^^^^^^^^
The ``*.info`` file will hold many useful information in case you need to debug any problems
occured during backups. Let's have a look at one of them:
.. code-block:: bash
host> cat ./backups/mysql/2017-06-17_13-31__mysql.sql.gz.info
.. code-block:: ini
:name: 2017-06-17_13-31__mysql.sql.gz.info
:caption: 2017-06-17_13-31__mysql.sql.gz.info
; mysqldump-secure backup record
; Do not alter this file!
; Creation of this file can be turned off via config file.
; ============================================================
; = Local system information
; ============================================================
[mysqldump-secure]
version = /usr/local/bin/mysqldump-secure (0.16.3)
vdate = 2016-08-18
config = /etc/mysqldump-secure.conf
[system]
uname = Linux 4.4.0-79-generic
hostname =
user = devilbox
group = devilbox
[tools]
mysqldump = /usr/bin/mysqldump (10.14 Distrib 5.5.52-MariaDB) [for Linux (x86_64)]
mysql = /usr/bin/mysql (15.1 Distrib 5.5.52-MariaDB) [for Linux (x86_64) using readline 5.1]
compressor = /usr/bin/gzip (gzip 1.5)
encryptor = Not used
; ============================================================
; = Database / File information
; ============================================================
[database]
db_name = mysql
db_size = 687326 Bytes (0.66 MB)
tbl_cnt = 30
[file]
file_path = /shared/backups/mysql
file_name = 2017-06-17_13-31__mysql.sql.gz
file_size = 136751 Bytes (0.13 MB)
file_chmod = 0644
file_owner = devilbox
file_group = devilbox
file_mtime = 1497699116 (2017-06-17 13:31:56 CEST [+0200])
file_md5 = 8d1a6c38f81c691bc4b490e7024a4f72
file_sha = 11fb85282ea866dfc69d29dc02a0418bebfea30e7e566c3c588a50987aceac2f
; ============================================================
; = Dump procedure information
; ============================================================
[mysqldump]
encrypted = 0
compressed = 1
arguments = --opt --default-character-set=utf8 --events --triggers --routines --hex-blob --complete-insert --extended-insert --compress --lock-tables --skip-quick
duration = 1 sec
[compression]
compressor = gzip
arguments = -9 --stdout
[encryption]
encryptor =
algorithm =
pubkey =
; ============================================================
; = Server information
; ============================================================
[connection]
protocol = mysql via TCP/IP
secured = No SSL
arguments = --defaults-file=/etc/mysqldump-secure.cnf
[server]
hostname = 001b3750b549
port = 3306
replica = master
version = MariaDB 10.1.23-MariaDB MariaDB Server
mysqldump
---------
`mysqldump <https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html>`_ is bundled with each PHP
container and ready to use. To backup a database named ``my_db_name`` follow the below listed
example which shows you how to do that from within the PHP container:
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Enter the PHP container
host> ./shell.sh
# Start the backup
devilbox@php-7.1.6 in /shared/httpd $ mysqldump -h mysql -u root -p my_db_name > /shared/backups/mysql/my_db_name.sql
To find out more about the configuration and options of mysqldump, visit its project page under:
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
phpMyAdmin
----------
If you do not like to use the command line for backups, you can use
`phpMyAdmin <https://www.phpmyadmin.net>`_. It comes bundled with the devilbox intranet.
To find out more about the usage of phpMyAdmin, visit its project page under:
https://www.phpmyadmin.net.
Adminer
-------
If you do not like to use the command line for backups, you can use
`Adminer <https://www.adminer.org>`_. It comes bundled with the devilbox intranet.
To find out more about the usage of Adminer, visit its project page under: https://www.adminer.org.
Restore
=======
Command line
------------
In order to restore or import mysql databases on the command line, you need to use the ``mysql``
binary. Here are a few examples for different file types:
``*.sql`` file
^^^^^^^^^^^^^^
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Enter the PHP container
host> ./shell.sh
# Start the import
devilbox@php-7.1.6 in /shared/httpd $ mysql -h mysql -u root -p my_db_name < /shared/backups/mysql/my_db_name.sql
``*.sql.gz`` file
^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Enter the PHP container
host> ./shell.sh
# Start the import
devilbox@php-7.1.6 in /shared/httpd $ zcat /shared/backups/mysql/my_db_name.sql.gz | mysql -h mysql -u root -p my_db_name
``*.sql.tar.gz`` file
^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Enter the PHP container
host> ./shell.sh
# Start the import
devilbox@php-7.1.6 in /shared/httpd $ tar xzOf /shared/backups/mysql/my_db_name.sql.tar.gz | mysql -h mysql -u root -p my_db_name
phpMyAdmin
----------
`phpMyAdmin <https://www.phpmyadmin.net>`_ supports importing many different formats out-of-the-box.
Simply select the compressed or uncompressed file and press ``Go`` in the import section of
the web interface.
Adminer
-------
`Adminer <https://www.adminer.org>`_ supports importing of plain (``*.sql``) or gzipped compressed
(``*.sql.gz``) files out-of-the-box. Simply select the compressed or uncompressed file and press
``Execute`` in the import section of the web interface.