数据库是每一个运维人员的基本功之一,这里就是对mysql操作语句做一番整理,不定期更新。


1)数据库备份语句

mysqldump -h数据库ip地址 -u用户名 -p密码 ABC XYZ > JQK.sql

把ABC库里的XYZ这个表备份到当前目录下JQK.sql里。

mysqldump -h数据库ip地址 -u用户名 -p密码 -d ABC > JQK.sql

把整个ABC的库结构导出到JQK.sql里。如果有提示Got errno 28 on write” 这个错误,检查磁盘容量,很有可能是磁盘容量不足。


如果非要动一个正在运行的数据库,那么就

mysqldump --skip-opt -u root --password=123456 dbname >mySQL.SQL


2)数据库导入数据库文件

mysql -h数据库ip地址 -u用户名 -p密码 ABC < JQK.sql

把JQK.sql这个数据库文件导入到ABC这个库里,注意!如果没有特殊注明ABC这个库的话,需要在JQK.sql里面第一句话说明“USE ABC;”。


3)数据库直接备份到压缩文件和从压缩文件里导入到数据库

#备份到压缩文件
mysqldump -h数据库ip地址 -u用户名 -p密码 ABC XYZ  | gzip > JQK.sql.gz
#从压缩文件导入
gzip < JQK.sql.gz | mysql -h数据库ip地址 -u用户名 -p密码


4)不进入mysql直接显示数据库查询结果

mysql -h数据库ip地址 -u用户名 -p密码 -D ABC -e '具体的sql语句';

如图,效果就是在对应的数据库里直接查询select count(1) from lg_openapi_dtl_20170207:

wKioL1icHMGSWttmAABCO7xdM2A314.png



5)查询库里的表语句

wKiom1icHbGQA6IeAAAwRBsrkr8807.png


6)修改帐号的密码

  mysql -u root
  mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

7)mysql语句仅限于单个数据库的方法

场景,mysql里的某一个数据库发生了损坏,但是手头有一个整个mysql的备份表,现在只需要那个有故障的数据库抢救成备份表里的数据,而其他数据库依旧是最新的数据,如果用2)里的例子,很不幸,那将会“污染”了其他正在运行的数据库。

怎么办?遇到这样的情况的恢复语句是

1
mysql -u用户名 -p --one-database 指定数据库名 < 备份数据文件.sql


8)mysql优化软件:推荐美团的SQLAdvisor,地址是:https://github.com/Meituan-Dianping/SQLAdvisor

使用手册是:http://tech.meituan.com/sqladvisor_pr.html


9)centos 7安装 mariadb过程: 

1
2
3
4
5
yum  install  mariadb mariadb-server
systemctl start mariadb ==> 启动mariadb
systemctl  enable  mariadb ==> 开机自启动
mysql_secure_installation ==> 设置 root密码等相关
mysql -uroot -p123456 ==> 测试登录!


10)mysql查看databases容量大小的语句:

1
SELECT CONCAT(ROUND(SUM(data_length)/(1024*1024*1024), 6),  ' GB' ) AS  'Total Data Size'  FROM information_schema.TABLES WHERE table_schema LIKE  '这里填写需要查询的数据库名字' ;

比如:

wKioL1loOYKxj8oaAACHv3b8ucU229.png

 

11)初始化root密码的方法

默认情况下mariadb的密码是空,当需要重新设定新密码的话,那么需要的语句就是#mysqladmin -u root -p password,然后先输入当前的密码,然后再输入两次新的密码就可以了。

wKioL1mUMvyhRuapAAAjoYT70ro239.png


12)查看MYSQL的历史命令的方法

#cat  ~/.mysql_history


13)快速获取一个databases里要删除掉所有tables的方法

研发要删除阿里云RDS里的一个databases,但是执行#drop database 数据库名的时候,会爆错“OPERATION need to be executed set by ADMIN.”这样就改成删除下面所有的表,但是如何能一口气得到所有表的删除语句呢?

在mysql里使用“SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` WHERE table_schema='数据库名';”,如图:

image.png


拷贝出来之后,复制一下就批量删除了。