经常使用
设置root远程登录
shell
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
mysql创建用户
shell
create user 'admin'@'%' identified by 'admin123';
grant all privileges on *.* to 'admin'@'%' identified by 'admin123';
grant all privileges on *.* to 'admin'@'%' identified by 'admin123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
create user 'admin'@'%' identified by 'admin123';
grant all privileges on *.* to 'admin'@'%' identified by 'admin123';
grant all privileges on *.* to 'admin'@'%' identified by 'admin123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
ONLY_FULL_GROUP_BY
shell
MySQL 5.7.5及以上功能依赖检测功能。默认情况下启用了ONLY_FULL_GROUP_BY.
ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现.
那么这个SQL是不合法的,因为查出来的列必须在GROUP BY后面出现否则就会报错。
#查看是否开启
select @@global.sql_mode;
#关闭ONLY_FULL_GROUP_BY模式
#全局
set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
#当前会话
set @@**SESSION**.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
MySQL 5.7.5及以上功能依赖检测功能。默认情况下启用了ONLY_FULL_GROUP_BY.
ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现.
那么这个SQL是不合法的,因为查出来的列必须在GROUP BY后面出现否则就会报错。
#查看是否开启
select @@global.sql_mode;
#关闭ONLY_FULL_GROUP_BY模式
#全局
set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
#当前会话
set @@**SESSION**.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
查看日志文件路径
shell
#里面有数据目录和日志目录
find / -name my.cnf
#查看日志
tail -f /var/log/mysqld.log
#里面有数据目录和日志目录
find / -name my.cnf
#查看日志
tail -f /var/log/mysqld.log
锁表的处理方法 Lock wait timeout exceeded; try restarting transaction
text
通过到 information_schema 中来进行查找被锁的语句
information_schema 这张数据表保存了 MySQL 服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
再简单点,这台 MySQL 服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,
等等信息都保存在 information_schema 表里面。
innodb_trx 当前运行的所有事务
innodb_locks 当前出现的锁
innodb_lock_waits 锁等待的对应关系
SELECT * FROM information_schema.INNODB_LOCK_waits
select * from information_schema.innodb_trx
kill trx_mysql_thread_id
kill 17129104
如果上述方法不能解决,时间长的线程全kill掉
SELECT * from information_schema.`PROCESSLIST` WHERE Time > 1 ORDER BY TIME desc;
show processlist;
kill id
通过到 information_schema 中来进行查找被锁的语句
information_schema 这张数据表保存了 MySQL 服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
再简单点,这台 MySQL 服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,
等等信息都保存在 information_schema 表里面。
innodb_trx 当前运行的所有事务
innodb_locks 当前出现的锁
innodb_lock_waits 锁等待的对应关系
SELECT * FROM information_schema.INNODB_LOCK_waits
select * from information_schema.innodb_trx
kill trx_mysql_thread_id
kill 17129104
如果上述方法不能解决,时间长的线程全kill掉
SELECT * from information_schema.`PROCESSLIST` WHERE Time > 1 ORDER BY TIME desc;
show processlist;
kill id
查询数据库容量和索引容量
shell
use information_schema;
select data_length,index_length
from tables where
table_schema='monitor_hl'
and table_name = 'monitor_alarm';
select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,
concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB
from tables where
table_schema='monitor_hl'
and table_name = 'monitor_alarm';
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)'
from information_schema.tables
where table_schema='monitor_hl';
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)'
from information_schema.tables
where table_schema='monitor_hl'
order by data_length desc, index_length desc;
use information_schema;
select data_length,index_length
from tables where
table_schema='monitor_hl'
and table_name = 'monitor_alarm';
select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,
concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB
from tables where
table_schema='monitor_hl'
and table_name = 'monitor_alarm';
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)'
from information_schema.tables
where table_schema='monitor_hl';
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)'
from information_schema.tables
where table_schema='monitor_hl'
order by data_length desc, index_length desc;
重新组织表 处理mysql数据库的数据分布不连续问题
shell
1.使用 OPTIMIZE TABLE 命令可以对表进行优化,这将重建表并消除碎片,从而改善数据的物理存储布局。这可以使表中的数据更加连续,从而提高查询性能。
·OPTIMIZE TABLE `monitor_weight_info`
2.重新构建索引: 索引碎片可能导致查询性能下降。通过删除并重新创建索引,可以重新组织索引,使其更加连续。您可以使用 ALTER TABLE 命令来重建索引。
3.定期分析表 使用 ANALYZE TABLE 命令手动分析表的统计信息 ANALYZE TABLE table_name; ANALYZE TABLE table1, table2, table3;
1.使用 OPTIMIZE TABLE 命令可以对表进行优化,这将重建表并消除碎片,从而改善数据的物理存储布局。这可以使表中的数据更加连续,从而提高查询性能。
·OPTIMIZE TABLE `monitor_weight_info`
2.重新构建索引: 索引碎片可能导致查询性能下降。通过删除并重新创建索引,可以重新组织索引,使其更加连续。您可以使用 ALTER TABLE 命令来重建索引。
3.定期分析表 使用 ANALYZE TABLE 命令手动分析表的统计信息 ANALYZE TABLE table_name; ANALYZE TABLE table1, table2, table3;
查询手机号相同的用户
shell
SELECT
*
FROM
driver a
WHERE
( ( SELECT COUNT( * ) FROM driver WHERE phone = a.phone ) > 1 )
ORDER BY
phone DESC,create_time desc
SELECT
*
FROM
driver a
WHERE
( ( SELECT COUNT( * ) FROM driver WHERE phone = a.phone ) > 1 )
ORDER BY
phone DESC,create_time desc