======MySQL====== ====== Backup ====== ===== Simple //naive// backup ===== Back up all databases into one file at once is a **bad idea**. - If there is a single problem (corrupted table, unreadable file, whatever), the rest of DB will **not** be dumped - Restoring one DB within many from one file is difficult, time consuming and with slightly bigger databases ~ 10GB i wish you a lot of RUM Here is an example anyway mysqldump -u root -p --all-databases > all_db_backup.sql In a script mysqldump -u root --password="my_secret" --all-databases > all_db_backup.sql If you are going to use this simple and //not so clever// backup, please at least make the file root readable only. =====Better way===== The backup user just need lock and read privileges. Create a backup user and grant lock tables and select privileges to it with the following MariaDB/MySQL commands GRANT LOCK TABLES, SELECT ON *.* TO 'backupuser'@'localhost' IDENTIFIED BY 'some_passwd'; flush privileges; Then list all databases and in backup one after another. Use umask to keep you files root readable only. Here is our script for 7 days rotating backups. DAY=$(date +"%w") BACKUP_TMP="/some_storage/db/mysql-${DAY}" PASS="some_passwd" USR="backupuser" umask 077 mkdir -p $BACKUP_TMP mysql -u $USR --password=$PASS -Bse "SHOW DATABASES" | while read DB ; do mysqldump --no-tablespaces --single-transaction -u $USR --password=$PASS ${DB} | bzip2 > $BACKUP_TMP/${DB}.sql.bz2 done ======Replication====== =====Correcting an error===== Chyba: phpmyadmin nemohl neco neco neco Reseni: stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; start slave; show slave status \G ....: YES ....: YES =====What replication is not===== * Replication is not a backup policy. A mistyped DELETE statement will be replicated on the slave too, and you could end up with two, perfectly synchronized, empty databases. Replication can help protect against hardware failure though. * Replication is not an answer to all performance problems. Although updates on the slave are more optimized than if you ran the updates normally, if you use MyISAM tables, table-locking will still occur, and databases under high-load could still struggle. * Replication is not a guarantee that the slave will be in sync with the master at any one point in time. Even assuming the connection is always up, a busy slave may not yet have caught up with the master, so you can't simply interchange SELECT queries across master and slave servers. Source: [[http://www.databasejournal.com/features/mysql/article.php/3355201/Database-Replication-in-MySQL.htm]] =====Moving to another server===== First import mysql tables whith all users mysql -u root -p mysql Then you can do ''flush privileges'' or use the old password. Finaly import all databases cd /srv/temp for i in *; do db=${i%%.sql}; echo $db; mysqladmin create $db --password=xxxxx; mysql -u root --password=xxxxxx $db <$i; done unfortunately in the middle the cycle failed (i caused it intentionaly) X=0 for i in *; do test $X -eq 0 && mv $i $i.done; if [ $i = 'gld.sql' ]; then X=1; fi; done ===== Reparing Tables===== mysql> CHECK TABLE fixtures; mysql> REPAIR TABLE fixtures; mysql> REPAIR TABLE fixtures USE_FRM; * http://felipecruz.com/repair-mysql-database.php ====== Performance ====== * http://www.mysqlperformanceblog.com ====== Regain root access ====== From http://www.simplehelp.net/2008/11/26/how-to-reset-a-lost-mysql-root-password/ # /etc/init.d/mysql stop # mysqld_safe --skip-grant-tables & # mysql -u root mysql> use mysql; mysql> update user set password=PASSWORD("NewMySQLPassword") where User="root"; mysql> flush privileges; mysql> quit # /etc/init.d/mysql stop # /etc/init.d/mysql start ===== Tunning ====== max_connections = 500 innodb_buffer_pool_dump_at_shutdown = 0 innodb_buffer_pool_dump_pct = 100 innodb_buffer_pool_instances = 8 innodb_buffer_pool_load_at_startup = 0 innodb_buffer_pool_size = 220G innodb_log_file_size = 5G thread_cache_size = 500 thread_pool_size = 12 innodb_read_io_threads = 64 innodb_write_io_threads = 64 tmp_table_size = 12G max_heap_table_size = 12G skip-name-resolve query_cache_type = 0 query_cache_limit = 128M query_cache_min_res_unit = 4k query_cache_size = 0 max_allowed_packet = 1G key_buffer_size = 64M aria_pagecache_buffer_size = 1G back_log = 500 sort_buffer_size = 2M join_buffer_size = 4M table_open_cache = 10000 performance_schema = ON innodb_flush_log_at_trx_commit = 2 innodb_lru_scan_depth = 128 innodb_autoinc_lock_mode = 2 #skip-log-error = OFF slave-skip-errors=all