Heim  >  Artikel  >  Datenbank  >  mysql修行练级之mysql新手入门常用命令

mysql修行练级之mysql新手入门常用命令

WBOY
WBOYOriginal
2016-06-07 14:52:041009Durchsuche

mysql修行练级之mysql新手入门常用命令 创建时间:2014.08.24 修改时间:2014.09.26 从一个运维工程师和DBA新手的角度出发,学习,实践从而掌握mysql相关操作。 1.登录MySQL服务器 当面对一个正在运行的mysql服务,我们需要做的第一件事情就是登录mysql服务。

mysql修行练级之mysql新手入门常用命令

创建时间:2014.08.24

修改时间:2014.09.26 


从一个运维工程师和DBA新手的角度出发,学习,实践从而掌握mysql相关操作。

1.登录MySQL服务器

当面对一个正在运行的mysql服务,我们需要做的第一件事情就是登录mysql服务。

MySQL客户端能够以两种不同的方式连接到mysqld服务器:

  1. 通过文件系统中的文件(默认为/tmp/mysql.sock)使用Unix套接字进行连接。

  2. 通过端口号使用TCP/IP进行连接。

Unix套接字文件的连接速度比TCP/IP快,但仅能在与相同计算机上的服务器相连时使用。
如果未指定指定主机名或指定了特殊的主机名localhost,将使用Unix套接字。

A.通过IP和端口的方式登录MYSQL服务

  • 本地登录

    liuqunying# mysql -h 127.0.0.1 -u用户名 -p用户密码 [-Pmysqlport;#默认为3306,也可以单独指定]

    如,mysql运行在我当前使用的机器上:

    mysql -h127.0.0.1 -uqunyingliu -p51cto20140824
  • 远程登录

    liuqunying# mysql -h主机IP或主机名 -u用户名 -p用户密码 [-Pmysqlport;#默认为3306,也可以单独指定]

    如,mysql服务运行在远程服务器上:

    mysql -h 10.1.8.24 -u qunyingliu -p 51cto20140824
  • 非标准端口登录

    非3306服务端口登录,例如:

    mysql -u qunyingliu -p 51cto20140824 -P 3307
    mysql -h 10.1.8.24 -u qunyingliu -p 51cto20140824 -P 3307

B.通过socket链接mysql服务

    mysql -S mysql.sock文件地址

例如,

    mysql -S /tmp/mysql/mysql.sock

当然如前所述,以下两种登录方式,默认也是通过unix连接mysql服务的:

mysql
mysql -P 3307 -u qunyingliu -p51cto20140824
mysql -h localhost -P 3307 -u qunyingliu -p51cto20140824

如果通过socket方式连接mysql,当mysql.sock文件不是默认的名称或存放路径时,我们将会收到类似如下错误信息:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

2.Mysql常用交互命令

  • Databases(数据库)相关操作

    show databases; 显示数据库
    create database name; 创建数据库
    use databasename; 选择数据库,屏幕提示:Database changed
    drop database name 直接删除数据库,无提示
    mysqladmin drop databasename 删除数据库前,有提示。

  • Tables(数据表)相关操作

    show tables; 显示表
    create table 表名(字段列表);创建数据库里面一个表格

    命令:create table ]);
    mysqlcreate table MyClass(
    >id int(4) not null primary key auto_increment,
    >name char(20) not null,
    >sex int(4) not null default '0',
    >degree double(16,2));

    describe(desc) tablename; 显示具体的表结构

    desc 表名,或者show columns from 表名

    insert into 表名;插入表数据

    命令:insert into [( [,.. ])] values ( 值1 )[,
      ( 值n )]
    如,往表'person'中插入两条记录:小光,男,31岁,汉族;小明,男,15岁,白族
    mysql> insert into person values ('小光','男','31岁','汉族'),('小明','男','15岁','白族');

    select from 表名;

    查询所有记录:select * from person;
    查询前2条记录:select * from person by name limit 0,2;

    delete from 表名;删除表数据

    命令:delete from 表名 where 表达式
    例如,mysql> delete from person where name='小明';
    删除表所有数据,mysql> delete * from person;

    update 表名 set 字段=新值,… where 条件;修改表中数据

    例如,mysql> update person set age=30 where name='小光';

    alter table 表名 add字段 类型 其他;在表中增加字段

    例如:在表person中添加了一个字段single(是否单身的意思),类型为char(1),默认值为n
    mysql> use xian;alter table person add single char(1) default 'n'
    或 alter table dbname add column userid int(11) not null primary key
      auto_increment;

    更改表名:
    alter table 原表名称 rename 修改后表的名称;
    rename table 原表名 to 新表名;

    rename table person to hunliantongjibiao;

    更新字段内容
      update 表名 set 字段名 = 新内容
      update 表名 set 字段名 = replace(字段名,'旧内容','新内容');

    更新生日从0824为20140824:
    update birthday set birthday=concat('2014',birthday);

    通过文本方式往数据库里面导入数据:load data local infile 'filepath' into table 表名;

    mysql> LOAD DATA LOCAL INFILE "/data/appdatas/jiayuanvip.txt" INTO TABLE person;

    truncate table 表名;清空表数据,表的记录计数重置
    drop table 表名;删除表,无提示

  • Users(用户权限)相关操作
    授权:
    grant 权限 on databases.tables to username identified by 'passwd'
    如,

    mysql> grant insert,select,update on mysql.* to qunyingliu identified by '51cto20140824'mysql> GRANT ALL PRIVILEGES ON *.* qunyingliu@localhostIDENTIFIED BY '51cto20140824' WITH GRANT OPTION;mysql> GRANT ALL PRIVILEGES ON *.* qunyingliu@"%" IDENTIFIED BY '51cto20140824' WITH GRANT OPTION;

    第一个*表示所有的数据库,第二个*表示所有的表,identified by 后面的是登录用的密码,可以省略,即缺省密码或者空密码。


  • 取消授权:
    revoke all privileges(权限) on *(数据库).*(表) from 帐号@主机;
    如,

      mysql>revove all privileges on *.* from qunyingliu@"%";

    删除用户:
    delete from user where user="帐号" and host="%";
    如,

    delete from user where user="qunyingliu" and host="%";

    数据库/数据表/数据列权限: 

    Alter: 修改已存在的数据表(例如增加/删除列)和索引。

    Create: 建立新的数据库或数据表。

    Delete: 删除表的记录。

    Drop: 删除数据表或数据库。

    INDEX: 建立或删除索引。

    Insert: 增加表的记录。

    Select: 显示/搜索表的记录。

    Update: 修改表中已存在的记录。


    全局管理MySQL用户权限:

    file: 在MySQL服务器上读写文件。

    PROCESS: 显示或杀死属于其它用户的服务线程。

    RELOAD: 重载访问控制表,刷新日志等。

    SHUTDOWN: 关闭MySQL服务。


    特别的权限:

    ALL: 允许做任何事(和root一样)。

    USAGE: 只允许登录--其它什么也不允许做。

  • 查看 MySQL 用户权限 

查看当前用户(自己)权限: show grants; 
查看其他 MySQL 用户权限: show grants for qunyingliu@10.2.122.1;
  • mysql服务相关操作

    查看mysql版本与当前时间:
    select version(),current_date;
    修改密码:
    update user set password=password("liuqunying") where user='qunyingliu'; flush privileges(刷新权限)

3.Mysql数据备份与恢复

  • 备份数据库:

    mysqldump -h host -u root -p 数据库名  --default-character-set=utf8[|gbk|latin1] >dbname_backup.sql
  • 备份数据表:

    mysqldump -h host -u root -p 数据库名 表名 >dbname_tablename_backup.sql

只导出插入数据的sql命令:

    mysqldump -h host -u root -p  -t 数据库名 [表名] >insert_data.sql

只导出创建表的sql命令:

    mysqldump -h host -u root -p  -d 数据库名 [表名] >create_table.sql

只导出表内的数据:

    mysqldump -h host -u root -p  -T 导出数据目录 数据库 表名
  • 恢复数据库:恢复的方法有多种,推荐source命令, 可以查看数据导入的进度
    mysql+source命令:

    qunyingliu_host#   mysql -h host -u root -p 
    mysql> use dbname;source dbname_backup.sql;

mysqldump命令:

    qunyingliu_host# mysqldump -u username -p dbname <p style="margin-top:15px;margin-bottom:15px;padding:0px;border:0px;color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22.399999618530273px;white-space:normal;">mysql命令:</p><pre style="margin-top:15px;margin-bottom:15px;padding:6px 10px;border:1px solid rgb(204,204,204);font-size:13px;font-family:Consolas, 'Liberation Mono', Courier, monospace;line-height:19px;">    qunyingliu_host# mysql -u username -p -D dbname <h2 style="margin:20px 0px 10px;padding:0px;border-width:0px 0px 1px;border-bottom-style:solid;border-bottom-color:rgb(204,204,204);font-size:24px;font-family:Helvetica, arial, freesans, clean, sans-serif;white-space:normal;">4.shell环境中mysql的用法</h2><pre style="margin-top:15px;margin-bottom:15px;padding:6px 10px;border:1px solid rgb(204,204,204);font-size:13px;font-family:Consolas, 'Liberation Mono', Courier, monospace;line-height:19px;">qunyingliu_host#  mysql -h host -uqunyingliu -p51cto20140824 -e "sql语句"qunyingliu_host#  mysqladmin -h myhost -u root -p "sql语句"

5.mysql使用过程中常见问题

  1. 重置root帐号登录密码

      qunyingliu_host# /etc/init.d/mysql stop
      qunyingliu_host# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
      qunyingliu_host# mysql -u root mysql 
      mysql> update user set password=password('qunyingliu@51cto') where user='root'; 
      mysql> flush privileges; 
      mysql> quit
      qunyingliu_host# /etc/init.d/mysqld restart 
      qunyingliu_host# mysql -uroot -p
  2. select 中加上distinct去除重复字段。

  3. 数据库名为mysql的数据库存放着当前mysql服务器上所有的库表信息。

  4. 退出mysql交互环境:quit或exit

  5. DROP,TRUNCATE 和DELETE *的区别 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点:
    a.truncate和 delete只删除数据不删除表的结构(定义),drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
    b.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger, 执行的时候将被触发.truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
    c.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动,显然drop语句将表所占用的空间全部释放 truncate语句缺省情况下见空间释放到 minextents个extent,除非使用reuse storage;truncate会将高水线复位(回到最开始).
    d.速度,一般来说: drop> truncate > delete
    e.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及.

使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据/

实际应用: 
delete from table; //删除所有数据 
truncate table; //将auto_increatement调制从0开始,实际就是从1开始

6.grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。 

如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“ ,grant select on testdb.* to dba@localhost with grant option; 这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。


  •  以后还是多在博客《运维者说》总结复习、开始在工作中应用myql命令了 和 不会 不能是接口

  •  顺带温习markdown语法,github版本的markdown语法有点不熟悉

  •  后续会不断更新

##########################

参考引用:
http://blog.fity.cn/post/138/
http://www.jb51.net/article/14200.htm


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn