常用命令
mysql导出
–skip-extended-insert 跳过多行写入 –skip-quote-names 跳过 ` 表名 –complete-insert 带字段的insert
结构导出
mysqldump -uroot -pxxx \
--default-character-set=utf8 \
--set-gtid-purged=off \
--compact \
--no-data \
--databases xxx \
--tables xxx > $(date +%Y%m%d%H%M%S)_struct.sql
数据导出
mysqldump -uroot -pxxx \
--default-character-set=utf8 \
--set-gtid-purged=off \
--compact \
--no-create-info \
--skip-quote-names \
--complete-insert \
--databases xxx \
--tables xxx > $(date +%Y%m%d%H%M%S)_data.sql
数据加条件导出
mysqldump -uroot -pxxx \
--default-character-set=utf8 \
--set-gtid-purged=off \
--compact \
--no-create-info \
--skip-quote-names \
--complete-insert \
--databases xxx \
--tables xxx \
--where="sqlxxx"> $(date +%Y%m%d%H%M%S)_data.sql
整库备份
# 建表语句+数据
mysqldump -u USER -p -h HOST -B DATABASENAME --single-transaction --default-character-set=utf8 --set-gtid-purged=off > DATABASENAME_$(date +%Y%m%d%H%M%S).sql
binlog日志查看
mysqlbinlog --base64-output=decode-rows -v -v mysql-bin.021530 >021530.sql
慢进程查看
select id,user,host,db,command,time,state,info from information_schema.PROCESSLIST order by time desc;
Slave 链接 master 配置
CHANGE MASTER TO MASTER_HOST='IPADDRESS',MASTER_USER='UserName',MASTER_PASSWORD='PassWord',master_log_file='BinLogFile',master_log_pos=POSITION;
从库扩容备份操作
1. 备份到目标机器:
innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user=root --password="PassWord" --compress --parallel=4 --compress-threads=4 --stream=xbstream /tmp/backup | ssh root@IPADDRESS "xbstream -x -C /DSTDIR"
2. 从库扩容操作:
- 目标机器解压
innobackupex --parallel=8 --decompress ./
- 目标机器初始化
innobackupex --use-memory=51200M --apply-log ./
- 目标机器恢复
innobackupex --defaults-file=/etc/my.cnf --copy-back ./2017-08-23_21-23-46/
- 清理备份文件
find /var/lib/mysql -name "*.qp" | xargs rm
chown -R mysql.mysql /var/lib/mysql
mysql 从库繁忙配置:
innodb_flush_log_at_trx_commit = 2
sync_binlog=1
set global innodb_flush_log_at_trx_commit=0;
set global sync_binlog=0;
mysql8.0密码更改原生:
set global validate_password.policy=0;
set global validate_password.length=1;
ALTER user 'root'@'localhost' IDENTIFIED BY 'PASSWORD';
ALTER USER 'UserName'@'%' IDENTIFIED WITH mysql_native_password BY 'PassWord';
mysql slave 权限配置:
CREATE USER 'rpl'@'172.16.1.%' IDENTIFIED BY 'xxx';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'rpl'@'172.16.1.%';
information_schema
- 表空间优化
碎片大小 = 数据总大小 - 实际表空间文件大小 数据总大小 = Data_length + Index_length = 101842944
实际表空间文件大小 = rows_Avg_row_length = 101177624
碎片大小 = (101842944 - 101177624) / 1024 /1024 = 0.63MB
- 整理碎片
alter table table_name engine = innodb
pt-online-schema-change optimize table
命令整理: show table status from DBNAME like ‘%TABLENAME%’ \G 查看;
- pt-online-schema-change-shell
#!/bin/bash
source /etc/profile
pt-online-schema-change \
--defaults-file=/etc/my.cnf \
-uroot -h localhost --password=PASSWORD \
--alter="ENGINE=InnoDB" \
D=DBNAME,t=TABLENAME \
1--no-check-replication-filters --alter-foreign-keys-method=auto \
1--recursion-method=none --print \
1--charset=utf8 --max-load="Threads_running=100" \
1--critical-load="Threads_running=200" --execute
- 查看所有数据库的容量
SELECT
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)',
sum(truncate(DATA_FREE/1024/1024, 2)) as '碎片占用(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;
- 查看指定库的大小
SELECT
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)',
sum(truncate(DATA_FREE/1024/1024, 2)) as '碎片占用(MB)'
from information_schema.tables
where table_schema='DBNAME'
order by data_length desc, index_length desc;
- 查看指定库所有表的大小
SELECT
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)',
truncate(DATA_FREE/1024/1024, 2) as '碎片占用(MB)'
from
information_schema.tables
where
table_schema='DBNAME'
order by
data_length desc, index_length desc;
- 查看数据库中容量排名前十的表
USE information_schema;
SELECT
TABLE_SCHEMA as '数据库',
table_name as '表名',
table_rows as '记录数',
ENGINE as '存储引擎',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)',
truncate(DATA_FREE/1024/1024, 2) as '碎片占用(MB)'
from tables
order by table_rows desc limit 10;
分区
- 重组
ALTER TABLE tableName REORGANIZE PARTITION pmax INTO(
PARTITION partitionName VALUES LESS THAN (890000000),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
-- 语法分析: 重组对应分区表最大分区pmax,将结果放入新的分区 依次递增。
- 添加
-- 递增:1209600
ALTER TABLE history ADD PARTITION (PARTITION p20210820 VALUES LESS THAN (1637337600));
mysql CSV入库
mysql -h IPADDRESS -uroot -pxxx DBNAME -e "load data local infile 'CSVFILE' into table $tableName FIELDS TERMINATED BY '\\\\t';"