常用MySQL命令
将某个字段/binary类型转换为utf8字符集的方法
CONVERT(job_meta USING utf8) COLLATE utf8_unicode_ci统计BINLOG中EVENT分布
# 按照时间段解析BINLOG mysqlbinlog -vv --start-datetime "2022-04-01 03:02:00" --stop-datetime "2022-04-01 03:08:00" mysql-bin.002572 >2572.txt # 将BINLOG过滤指定EVENT名到文件中 cat 2572.txt | grep -E "^SET TIMESTAMP|### (INSERT|UPDATE|DELETE)" >table.txt # 查看单个事务的更改行数 uniq -c table.txt # 统计某个时间段EVENT分布情况 sort table.txt | uniq -c | sort -n -k1删除非系统库表
select concat('drop database ',schema_name,';') from information_schema.schemata where schema_name not in ('dba','mysql','performance_schema','sys','tmpdir','mysql','information_schema','binlog')查看索引是否被使用(需要到主从多台机器上都查一下)
SELECT object_type, object_schema, object_name, index_name, count_star, count_read, COUNT_FETCH FROM PERFORMANCE_SCHEMA.table_io_waits_summary_by_index_usage where object_schema='ying99_pomodel' and object_name='portfolio_composition';获取所有connection的某个 variables 状态
select p.id, p.user, v.VARIABLE_NAME, v.VARIABLE_VALUE, p.time, p.command from information_schema.processlist p left join performance_schema.threads t on p.id = t.PROCESSLIST_ID left join `performance_schema`.`variables_by_thread` v on t.thread_id = v.thread_id where v.VARIABLE_NAME like 'auto_increment_increment' and v.VARIABLE_VALUE = '1' ;跳过复制错误(GTID)
SET GTID_NEXT = '127a3424-847c-11ea-90a6-00163e104a66:2743448'; BEGIN; COMMIT; SET SESSION GTID_NEXT = 'AUTOMATIC'; START SLAVE;统计单IP连接使用量
select User,substring_index(Host,':',1) as ip,count(1) as conn_num from information_schema.processlist group by ip having conn_num>=50 order by conn_num desc;统计大表
select table_schema,table_name, (data_length + index_length) /(1024 * 1024 * 1024) as size_G from information_schema.tables order by size_G desc limit 30;mydumper常用过滤库表
/usr/local/bin/mydumper -h 10.242.149.120 -u zft_db_dump -p zft_db_dump -P 3306 --insert-ignore --load --lhost 127.0.0.1 --luser fmha_admin --lpassword ******* --lport 3306 -t 5 -v 1 --less-locking -c -o /data1/fmha_dump_data/2019053110073872 --enable-binlog --progressfile /data1/fmha_dump_data/2019053110073872/progress.log --logfile /data1/fmha_dump_data/2019053110073872/mydumper.log -x '^(?!(mysql.user$|mysql.db$|mysql.hosts$|mysql.tables_priv$|mysql.columns_priv$|mysql.procs_priv$|mysql.proxies_priv$|mysql.gtid_executed$|mysql.slave_master_info$|mysql.slave_relay_log_info$|mysql.slave_worker_info$|sys.*|information_schema.*|performance_schema.*))'pt-online-schema-change工具常用参数
pt-online-schema-change -h 127.0.0.1 -P 30002 -u ying99-testing -p ying99-testing --charset=utf8 --max-load="Threads_running:25" --critical-load="Threads_running:100" --progress="time,1" --nocheck-replication-filters --retries=10 --chunk-time=${CHUNKTIME} --chunk-size=${CHUNKSIZE} --chunk-size-limit=${CHUNKSIZELIMIT} --alter="${ALTERSQL}" D=${curr_alter_db},t=${curr_alter_table} --recursion-method=none --exec --print统计库表内存用量
SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, sys.format_bytes(SUM(current_alloc)) AS current_alloc FROM sys.x$memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC;pt-kill
pt-kill --match-user '^(?:eossvc-user)|(?:core-debezium-user)$' --victims all --interval 5 -v -u root --ask-pass -h 127.0.0.1 --print --kill找到MetaData LOCK
SELECT locked_schema, locked_table, locked_type, waiting_processlist_id, waiting_age, waiting_query, waiting_state, blocking_processlist_id, blocking_age, substring_index(sql_text,"transaction_begin;" ,-1) AS blocking_query, sql_kill_blocking_connection FROM ( SELECT b.OWNER_THREAD_ID AS granted_thread_id, a.OBJECT_SCHEMA AS locked_schema, a.OBJECT_NAME AS locked_table, "Metadata Lock" AS locked_type, c.PROCESSLIST_ID AS waiting_processlist_id, c.PROCESSLIST_TIME AS waiting_age, c.PROCESSLIST_INFO AS waiting_query, c.PROCESSLIST_STATE AS waiting_state, d.PROCESSLIST_ID AS blocking_processlist_id, d.PROCESSLIST_USER as blocking_processlist_user, d.PROCESSLIST_TIME AS blocking_age, d.PROCESSLIST_INFO AS blocking_query, concat('KILL ', d.PROCESSLIST_ID) AS sql_kill_blocking_connection FROM performance_schema.metadata_locks a JOIN performance_schema.metadata_locks b ON a.OBJECT_SCHEMA = b.OBJECT_SCHEMA AND a.OBJECT_NAME = b.OBJECT_NAME AND a.lock_status = 'PENDING' AND b.lock_status = 'GRANTED' AND a.OWNER_THREAD_ID <> b.OWNER_THREAD_ID AND a.lock_type = 'EXCLUSIVE' JOIN performance_schema.threads c ON a.OWNER_THREAD_ID = c.THREAD_ID JOIN performance_schema.threads d ON b.OWNER_THREAD_ID = d.THREAD_ID ) t1, ( SELECT thread_id, group_concat( CASE WHEN EVENT_NAME = 'statement/sql/begin' THEN "transaction_begin" ELSE sql_text END ORDER BY event_id SEPARATOR ";" ) AS sql_text FROM performance_schema.events_statements_history GROUP BY thread_id ) t2 WHERE t1.granted_thread_id = t2.thread_id \Gmysqldump 命令
mysqldump --single-transaction --complete-insert --no-create-info --extended-insert=false -h获取长时间没有释放的事务
select p.id, p.user, p.host, IF(p.DB IS NULL, '', p.DB) as db, timestampdiff(SECOND, t.trx_started, now()) as time from information_schema.PROCESSLIST p JOIN information_schema.INNODB_TRX t ON p.id = t.trx_mysql_thread_id where t.trx_started<= date_sub(now(), interval 60 second);
最后修改 2026-10-20 · auto published by siyuan-plugin-publisher (d6b605a)