设为首页 收藏本站
查看: 593|回复: 0

[经验分享] mysql修行练级之mysql新手入门常用命令

[复制链接]

尚未签到

发表于 2018-9-30 09:54:52 | 显示全部楼层 |阅读模式
mysql修行练级之mysql新手入门常用命令
  创建时间:2014.08.24
  修改时间:2014.09.26
  从一个运维工程师和DBA新手的角度出发,学习,实践从而掌握mysql相关操作。
1.登录MySQL服务器
  当面对一个正在运行的mysql服务,我们需要做的第一件事情就是登录mysql服务。
  MySQL客户端能够以两种不同的方式连接到mysqld服务器:

  •   通过文件系统中的文件(默认为/tmp/mysql.sock)使用Unix套接字进行连接。
  •   通过端口号使用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 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>  如,
    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 < dbname_backup.sql  mysql命令:
    qunyingliu_host# mysql -u username -p -D dbname < dbname_backup.sql4.shell环境中mysql的用法
qunyingliu_host#  mysql -h host -uqunyingliu -p51cto20140824 -e "sql语句"qunyingliu_host#  mysqladmin -h myhost -u root -p "sql语句"5.mysql使用过程中常见问题

  •   重置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
  •   select 中加上distinct去除重复字段。
  •   数据库名为mysql的数据库存放着当前mysql服务器上所有的库表信息。
  •   退出mysql交互环境:quit或exit
  •   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.iyunv.net/article/14200.htm



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-606588-1-1.html 上篇帖子: mysql入门 下篇帖子: MySQL Dual-Master 双向同步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表