====== MYSQL cheat sheet ====== Max open files: su - mysql -c 'ulimit -aHS' -s '/bin/bash' Mysql debug starting: su - mysql -c 'mysqld' -s '/bin/bash' [OR] strace -s1000 service mysqld start Show process list sorted by time: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e 'SELECT user, time, state, info FROM information_schema.processlist ORDER BY time, id \G' Log to file: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e 'SELECT user, time, state, info FROM information_schema.processlist ORDER BY time, id \G' > /root/mysql-processlist-$(date +%s).txt DirectAdmin show processlist: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e 'show processlist;' Kill one query: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "kill QUERY_ID;" Kill all queries by pattern: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -se 'show processlist' | grep -i MYSQL_USER | grep SELECT | awk '{print "mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e \"kill "$1";\""}' Repairing MYISAM tables: myisamchk -r *.MYI MySQL check mysqlcheck --defaults-extra-file=/usr/local/directadmin/conf/my.cnf --all-databases MySQL repair mysqlcheck --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -r --all-databases MySQL optimize all databases mysqlcheck --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -o --all-databases ====== Enabling slow queries in directadmin panel ====== * ENABLE SLOW QUERY LOG: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "SET GLOBAL slow_query_log = 'ON';" * SLOW QUERY LOG TIME: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "SET GLOBAL long_query_time = 5;" * DISABLE SLOW QUERY LOG: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "SET GLOBAL slow_query_log = 'OFF';" * SLOW QUERY LOG FILE: mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "SET GLOBAL slow_query_log_file = '/var/log/mysql/slow_query.log';" * LOG UNINDEXED QUERY mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "SET GLOBAL log_queries_not_using_indexes = 'ON';" ====== my.cnf start point ====== Links: * https://linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/ * http://techinfobest.com/optimize-mysql-table_open_cache/ * https://www.percona.com/blog/2014/07/29/prevent-mysql-downtime-set-max_user_connections/ [mysqld] datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock symbolic-links = 0 # mysql --defaults-extra-file=/usr/local/directadmin/conf/my.cnf -e "show global variables like 'local_infile';" local-infile = 0 ## Skip reverse DNS lookup. Be aware! #skip-name-resolve ## compatability #sql_mode = ## Log errors # log_error = /var/lib/mysql/hostname.err # slow_query_log = 1 # slow_query_log_file = /var/lib/mysql/hostname-slow-queries.log ##TMPFS #tmpdir = /dev/shm ## Restrictions max_connections = 70 max_user_connections = 30 wait_timeout = 10 interactive_timeout = 50 long_query_time = 5 ##http://techinfobest.com/optimize-mysql-table_open_cache/ table_open_cache = 32768 ##table_open_cache / 2 + 400 table_definition_cache = 16784 ##2-3x table_open_cache open_files_limit = 65536 max_allowed_packet = 128M max_heap_table_size = 256M tmp_table_size = 256M thread_concurrency = 4 ## Number of CPUs x 2 ##buffers key_buffer_size = 256M ## 128MB for every 1GB of RAM join_buffer_size = 8M sort_buffer_size = 2M ## 1MB for every 1GB of RAM read_buffer_size = 2M ## 1MB for every 1GB of RAM read_rnd_buffer_size = 2M ## 1MB for every 1GB of RAM ##cache query_cache_type = 0 #recomended disable /1 query_cache_size = 0 #recomended disable /32MB for every 1GB of RAM query_cache_limit = 1M thread_cache_size = 4 ##innodb innodb_buffer_pool_size=2G innodb_log_file_size=256M innodb_buffer_pool_instances=2 ====== Mysqldump all databases ====== mkdir -p /root/db_backup for i in `mysql -e "show databases" -sss`; do { mysqldump ${i} --routines > /root/db_backup/${i}.sql; }; done ====== MySQL recreate clean db ====== service mysqld stop mv /var/lib/mysql /var/lib/mysql_backup mysql_install_db chown -R mysql. /var/lib/mysql chmod 755 /var/lib/mysql service mysqld start ====== MySQL create database and user ====== Create database: CREATE DATABASE new_db; Create user: CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; Grant privilegies: GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost'; Make them work: FLUSH PRIVILEGES; Change password: SET PASSWORD FOR 'newuser'@'localhost' = PASSWORD('NewPASSWORD'); FLUSH PRIVILEGES; ====== CentOS7 - mysql datadir linked to home ====== # cat /usr/lib/systemd/system/mariadb.service | grep -i home # Prevent accessing /home, /root and /run/user ProtectHome=true try changing that to false systemctl daemon-reload and start ====== Links ====== * Monitoring tools: https://www.tecmint.com/mysql-performance-monitoring/ * Recover corrupted db: https://help.directadmin.com/item.php?id=559 * List MyISAM & Convert: https://dba.stackexchange.com/a/50030 * https://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html * http://blackbird.si/mysql-corrupted-innodb-tables-recovery-step-by-step-guide/ * https://www.percona.com/blog/2018/07/03/linux-os-tuning-for-mysql-database-performance/ * Removing bin logs and retention: https://dba.stackexchange.com/questions/41050/is-it-safe-to-delete-mysql-bin-files * https://www.osradar.com/optimize-mysql-mariadb-on-linux