11/07/2022
optimize mysql

Show mysql database size

SELECT table_schema "DB Name", Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
 FROM information_schema.tables
 GROUP BY table_schema

See real file size

du -hs /root/docker/mysql/data/*/

optimize mysql

 docker exec -ti mysql mysqlcheck -u root -p -o monitoring;
 docker exec -ti mysql mysqlcheck -u root -p -o --all-databases;

Parametres utiles pour que mysql s'éteigne correctement :

# lancer avec ces paramètres
--sql-mode= --innodb_fast_shutdown=0
# ou comme ça
mysql -uroot -p... -e "SET GLOBAL innodb_fast_shutdown = 0"
# verifier que c'est bien set
select @@innodb_fast_shutdown;

éteindre correctement :

        sigterm
        mysql -uroot -p... -e "shutdown"
        docker exec mysql /usr/bin/mysqladmin -uroot -proot shutdown
        docker stop mysql

        docker inspect mysql --format='{{.State.ExitCode}}'
        docker rm -f mysql
        # mv /root/dockerdata/mysql/ib_logfile[01] /tmp

accelerer le shutdown

        Set global innodb_max_dirty_pages_pct = 0;
        
        show global STATUS LIKE 'Innodb_buffer_pool_bytes_dirty'
        mysqladmin ext -i10 | grep dirty

binary logs

Si des tas de fichiers binlog.XXXXXX existent et occupent trop d'espace on peut les supprimer avec cette commande. Ils ne sont utiles que pour la réplication, et ne sont plus utile si la réplication est terminée

PURGE BINARY LOGS BEFORE '2022-10-20 10:00:00';

To safely purge binary log files, follow this procedure:

to automatically clean logs set this variable to 1 day or anything else:

binlog_expire_logs_seconds=86400

you can check the varaible with this

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds'