Linux 中操作myql常用命令

1,247 阅读4分钟

连接数据库

  1. 登录 mysql

    远程连接

    $ mysql -P [port] -h [hostname|ip] -u db_login__user_name -p[db_user_password]
    

    本地连接

    $ mysql -u db_login__user_name -p[db_user_password] 
    

操作数据库

  1. 查看数据库

    show databases;
    
  2. 查看数据库引擎

    show engines;
    
  3. 新建数据库

    create database database_name
    

    database_name : 需要创建的数据库名称

  4. 使用数据库

    mysql> use database_name;
    
  5. 显示数据库中的表

    mysql> show tables;
    
  6. 创建表

    create table <table_name>;
    
  7. 修改表名称

    ALTER TABLE <table_name> RENAME <new_table_name>
    
  8. 查看表结构

    show columns from <table_name>;
    

    也可以使用 describe table_name 查看.

  9. 修改表结构

    ALTER TABLE <table_name> CHANGE <old_columns_name> <new_columns_name> <字段定义>
    
  10. 删除表

   drop <table_name>;
  1. 删除数据库

    drop database database_name
    

数据导入导出

  1. 仅导出表结构

    mysqldump -h [hostname] -u [db_user_name] -p[db_user_password] database_name table_name -d > ~/db/mysql/export/table_name.sql
    
  2. 导出表数据和结构

    mysqldump -h [hostname] -u [db_user_name] -p[db_user_password] database_name <table_name> > ~/db/mysql/export/table_name.sql
    
  3. 仅导出数据库结构

    mysqldump -h [host|ip] -u [db_user_name] -p[db_user_password] database_name > ~/db/mysql/export/database_name.sql
    
  4. 导出数据库结构和数据

    mysqldump -h [host|ip] -u [db_user_name] -p[db_user_password] database_name -d> ~/db/mysql/export/database_name.sql
    
  5. 导入数据

    mysql -h [host|ip] -u [db_user_name] -p[db_user_password] database_name < ~/db/mysql/import/data.sql
    

ALTER TABLE 常用命令

  1. 修改表名称

    ALTER TABLE <表名> RENAME <新表名>
    
  2. 修改表的存储引擎

    ALTER TABLE account ENGINE=MyISAM;
    

    ENGINE : ISAM|MYISAM|HEAP|INNODB|BERKLEYDB

  3. 添加字段

    ALTER TABLE <表名> ADD <字段名称> <字段定义>
    
  4. 修改字段名称及字段定义

    ALTER TABLE <表名> DROP <字段名称>
    
  5. 修改字段定义

    ALTER TABLE <表名> CHANGE <旧字段名称> <新字段名称> <字段定义>
    
  6. 删除字段

    ALTER TABLE <表名> MODIFY <字段名称> <字段定义>
    

查询状态

  1. 查看当前所有连接详情

    show full processlist;
    
  2. 查询状态值

    show status like '%var_name%';
    

    var_name:

    Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量 ​ Aborted_connects 尝试已经失败的MySQL服务器的连接的次数 ​ Connections 试图连接MySQL服务器的次数 ​ Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量 ​ Delayed_insert_threads 正在使用的延迟插入处理器线程的数量 ​ Delayed_writes 用INSERT DELAYED写入的行数 ​ Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数 ​ Flush_commands 执行FLUSH命令的次数 ​ Handler_delete 请求从一张表中删除行的次数 ​ Handler_read_first 请求读入表中第一行的次数 ​ Handler_read_key 请求数字基于键读行 ​ Handler_read_next 请求读入基于一个键的一行的次数 ​ Handler_read_rnd 请求读入基于一个固定位置的一行的次数 ​ Handler_update 请求更新表中一行的次数 ​ Handler_write 请求向表中插入一行的次数 ​ Key_blocks_used 用于关键字缓存的块的数量 ​ Key_read_requests 请求从缓存读入一个键值的次数 ​ Key_reads 从磁盘物理读入一个键值的次数 ​ Key_write_requests 请求将一个关键字块写入缓存次数 ​ Key_writes 将一个键值块物理写入磁盘的次数 ​ Max_used_connections 同时使用的连接的最大数目 ​ Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块 ​ Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量 ​ Open_tables 打开表的数量 ​ Open_files 打开文件的数量 ​ Open_streams 打开流的数量(主要用于日志记载) ​ Opened_tables 已经打开的表的数量 ​ Questions 发往服务器的查询的数量 ​ Slow_queries 要花超过long_query_time时间的查询数量 ​ Threads_connected 当前打开的连接的数量 ​ Threads_running 不在睡眠的线程数量 ​ Uptime 服务器工作了多少秒

  3. 查看表状态

    show table status;
    
  4. 查看数据库状态

    show table status from <table_name>
    
  5. 查看建表语句

    show create table <table_name>;
    
  6. 查看表字段详情

    show full columns from <table_name>;
    

mysql调优

  1. EXPLAIN

    EXPLAIN <查询sql>
    

    id:SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符. select_type:SELECT 查询的类型. table:查询的是哪个表 partitions:匹配的分区 type:join 类型 possible_keys:此次查询中可能选用的索引 key:此次查询中确切使用到的索引. ref:哪个字段或常数与 key 一起被使用 rows:显示此查询一共扫描了多少行. 这个是一个估计值. filtered:表示此查询条件所过滤的数据的百分比 extra:额外的信息

用户相关

  1. 查询用户信息

    SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
    
  2. 创建用户

    create user <db_user>@'%' identified by <db_user_password>;
    
  3. 删除用户

    DROP USER <db_user>@'localhost';
    
  4. 授权

    grant all privileges on <db_name>.* to <db_user>@'%' identified by <db_user_password>;