mysql工作秘籍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/millions_02/article/details/89639961

mysql

net start mysql

查看安装目录

链接mysql
show variables like "%char%"
查看character_sets_dir

myql.ini目录

C:\ProgramData\MySQL\MySQL Server 8.0

开启非本机ip访问

1. mysql.init 添加 bind-address=0.0.0.0 
2. 数据库执行
update user set host='%' where user='root';
select user,host from user;
flush privileges;
alter user 'root'@'%' identified with mysql_native_password by 'root';
flush privileges;

常用操作

1.查询数据库大小 
SELECT TABLE_SCHEMA, SUM(DATA_LENGTH)/1024/1024 FROM TABLES GROUP BY TABLE_SCHEMA;
2.数据库版本
select version(); 

mysql导入导出

  • 尽量不要用ide的导出,导出语句很low,占用空间较大,例如insert一个个写,130M,220M对比
1、备份数据库 
#mysqldump -u 用户名 -p 数据库名 > 导出文件名 
2、导出表结构 
#mysqldump -u 用户名 -p -d 数据库名 --add-drop-table 表名 > 导出文件名  ##-d:表示没有数据,--add-drop-table 在每个creat语句之前增加一个drop table 
3、导出表 
#mysqldump -u 用户名 -p 数据库名 表名> 导出文件名 
4、导出数据 
#mysqldump -u 用户名 -p -t 数据库名 > 导出文件名 
5、导入数据 
#mysql 数据库名<文件路径 -u 用户名 -p 
实例: 
备份数据库 
#mysqldump 数据库名 >数据库备份名   
   
#mysqldump -A -u 用户名 -p密码 数据库名>数据库备份名   
   
#mysqldump -d -A --add-drop-table -uroot -p >xxx.sql 
导出结构不导出数据 
mysqldump --opt -d 数据库名 -u root -p > xxx.sql 
导出数据不导出结构 
mysqldump -t 数据库名 -uroot -p > xxx.sql 
导出数据和表结构 
mysqldump 数据库名 -uroot -p > xxx.sql 
导出特定表的结构 
mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql 
导入数据 
#mysql 数据库名 < 文件名 
网络上的优化导出,需要超级管理权限
mysqldump -uroot -p -B kuaifacloud_facecard --triggers --routines --events --set-gtid-purged=OFF -e --max_allowed_packet=4194304 --net_buffer_length=16384 > ./newfacemysql3.sql

高可用

MySQL 5.7半同步复制技术 - 简书

  • binlog :binlog是mysql记录数据修改sql(查询不记录),每个操作的时间,pos点,serverid,二进制事物安全,用于主从复制和增量恢复。查看binlog用mysqlbinlog,或登录mysql服务器,用show binlog events查看。index为二进制索引文件,.00000*为二进制日志文件
  • binlog恢复:mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名 MySQL的binlog日志 - 马丁传奇 - 博客园
  • event:事物,一个事物可能有多个binlog组成
  • 复制模式
1.普通复制:mysqls.2版本,master会等待slave同步后再进行其他操作,Slave的I/O和SQL功能在一个线程,主库Dump线程发送这些新的Binlog,从库读取master的binlog,然后直接写入,主从延迟大的时候,会导致大量的binblog没有备份
2.异步复制:mysql 4.02版本,slave的I/O和SQL功能在2个线程,读取主的binlog写入relay log,sql线程从relay log中读取event写入。这种方式主库并不会管slave是否落后,所有主库crash,会丢失数据
3.半同步复制:mysql5.5版本,主库在完成一个事物前保证至少一个从库接收兵写入relay log,无需等待写入
4.全同步复制:mysql5.7引进,主库要等待所有从库写入这些操作
5.GTID复制:不用binlog和position

需要研究的运维命令

sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/ ' your.sql > your_revised.sql

2 去除 GTID_PURGED 子句:
awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print $0 } }' your.sql | grep -iv 'set @@' > your_revised.sql

3 检查修改后的文件:
egrep -in "definer|set @@" your_revised.sql

undo log 、lb_logfile(redo log、 bin log) 在系统崩溃重启时,作事务重做的

  • undo 用于保证事物原子性,配合redo log,实现事物可回滚,存在ib_logfile
  • redo log,InnoDB引擎层记录 数据库的物理变更,用于数据库多宕机的恢复,存在ib_logfile
  • bin log 由server层,记录逻辑变更,用于主从复制

配置调优的重要参数

mysql 配置调优
innodb_buffer_pool_size 数据缓冲  ,默认为8M ,建议数据大小+10% 
innodb_log_file_size 日志组中,每个log的大小
innodb_log_buffer_size 事务在内存中的缓冲

紧急排查故障sql

  • 通过processlist表
//按客户端 IP 分组,看哪个客户端的链接数最多
select client_ip,count(client_ip) as client_num from (select substring_index(host,':' ,1) as client_ip from processlist ) as connect_info group by client_ip order by client_num desc;
//查看正在执行的线程,并按 Time 倒排序,查看特别长的线程
select * from information_schema.processlist where Command != 'Sleep' order by Time desc;
// 所有执行时间超过 5 分钟的线程,拼凑出 kill 语句,方便后面查杀
select concat('kill ', id, ';') from information_schema.processlist where Command != 'Sleep' and Time > 300 order by Time desc;

猜你喜欢

转载自blog.csdn.net/millions_02/article/details/89639961