Linux实用工具-mysql

描述

这里简单介绍Linux下面mysql命令(以及相关命令)操作mysql数据库的方法。

举例

启动mysqld服务

#service mysqld start

当然,可以用stop参数停止,用restart参数重启mysqld服务。

设置mysql管理员密码

#mysqladmin -u root password '123'

这里首先启动mysqld服务,然后设置mysql数据库root帐号密码,密码为123。 数据库安装好后,我们应该为mysql数据库创建一个管理帐号。执行这个命令之后, mysql数据库的管理员是root,密码是123(实践发现,不让设置成root之外的名字,应该有其他的方法)。

使用root用户登录mysql

#mysql --user=root --password=123

或者

#mysql -uroot -p123

或者

#mysql -uroot -p

这里,假设root用户的密码是123,最后一个命令会提示你额外输入密码。这样会有 "mysql>"提示符号,提示你和mysql进行交互。操作这些命令的时候,应该把mysqld服务器打开。注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP。

mysql常用交互命令

首先使用root用户登录

$mysql --user=root --password=123

创建一个超级用户

mysql> grant all privileges on *.* to 'test'@'localhost' identified by 'password' with grant option;

这里,创建了一个用户"test",其密码是"password".注意,这里第一行"@"字符的左右没有空格。另外,在mysql数据库中,每操作一个命令,都是;号结尾的。

取消用户test的权限

mysql> revoke all privileges on *.* from test@localhost;

查看当前所使用的数据库

mysql> SELECT DATABASE();

输入之后,输出类似如下:

+------------+
| DATABASE() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)

这里,输出表示还没有使用数据库,输入命令可以小写为:"select database();"。

查找存在的数据库

mysql> show databases;

输入之后,输出如下:

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)

这里,在mysql安装好,设置好管理员后,第一次进入系统,我们用show databases;命令查看数据库的列表,发现有两个数据库,mysql和test,这是系统自建的,是让大家练习用的。

查找当前数据库存在的所有表

mysql> show TABLES;

输入之后,输出如下:

ERROR 1046 (3D000): No database selected

这里,因为没有打开数据库,所以无法显示表。

创建一个名为quietheart的数据库

mysql> create database quietheart;

如果创建成功,输出如下:

Query OK, 1 row affected (0.07 sec)

这里,我们创建之后可以用用"show databases;"查看,如下:

mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| quietheart |
| test |
+--------------------+
4 rows in set (0.00 sec)

删除数据库quietheart

mysql> drop database quietheart;

删除成功的话,输出如下:

Query OK, 0 rows affected (0.00 sec)

这里,我们删除之后可以用用"show databases;"查看,如下:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)

使用一个数据库

mysql> use test

输入之后,输出如下:

Database changed

这里,操作一个数据库之前,都需要用这个命令。比较奇怪,没有使用';'作为结尾,使用';'做结尾也行,可以连着写其他的命令,例如"use test;show tables;"。

可以查看数据库中的表(TABLES可以为小写)如下:

mysql> show TABLES;
Empty set (0.00 sec)

查看当前选择的数据库如下:

mysql> select database();
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)

查看状态

mysql> show status;

输入之后,输出部分如下:

+-----------------------------------+-----------+
| Variable_name | Value |
+-----------------------------------+-----------+
| Aborted_clients | 1 |
| Aborted_connects | 0 |
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 0 |
| Bytes_received | 226 |
| Bytes_sent | 6708 |
| Com_admin_commands | 0 |

这里会输出很多的内容,省略。

查看用户信息

mysql> select user,host,password from mysql.user;

输入之后,输出如下:

+------------+-----------------+------------------+
| user | host | password |
+------------+-----------------+------------------+
| root | localhost | 773359240eb9a1d9 |
| root | lv-k.domain.com | |
| root | 127.0.0.1 | |
| | localhost | |
| | lv-k.domain.com | |
| quietheart | localhost | 773359240eb9a1d9 |
+------------+-----------------+------------------+
6 rows in set (0.04 sec)

设置root在主机lv-k.domain.com上面的密码

mysql> set password for root@'lv-k.domain.com'=password('123456');
Query OK, 0 rows affected (0.04 sec)

删除匿名用户

mysql> select user,host from mysql.user;
+------------+-----------------+
| user | host |
+------------+-----------------+
| root | 10.1.2.213 |
| root | 127.0.0.1 |
| | localhost |
| quietheart | localhost |
| root | localhost |
| | lv-k.domain.com |
| root | lv-k.domain.com |
+------------+-----------------+
7 rows in set (0.00 sec)
mysql> delete from mysql.user where user="";
Query OK, 2 rows affected (0.03 sec)
mysql> select user,host from mysql.user;
+------------+-----------------+
| user | host |
+------------+-----------------+
| root | 10.1.2.213 |
| root | 127.0.0.1 |
| quietheart | localhost |
| root | localhost |
| root | lv-k.domain.com |
+------------+-----------------+
5 rows in set (0.00 sec)

这里,先查看存在用户信息,然后使用"delete"命令进行真正的删除操作,最后再次查看用户信息,发现匿名用户被delete了。

退出mysql

mysql>exit

这里,也可以直接按[Ctrl]d退出mysql.

导出数据

#mysqldump -u root -p123 --databases mytest >mysql.mytest

#mysqldump -uroot -p --opt mytest > mysql.mytest

#mysqldump -uroot -p mytest > mysql.mytest

#mysqldump -u root -p123456 --databases mytest >mysql.mytest

其中前三种方式需要输入密码,具体过程如下:

mysql> create database mytest;
Query OK, 1 row affected (0.04 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| mytest |
| test |
| wordpress_db |
+--------------------+
5 rows in set (0.00 sec)
mysql> use mytest
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| mytest |
+------------------+
1 row in set (0.00 sec)

mysql> select * from mytest;
+------+--------------+
| num | name |
+------+--------------+
| 1 | Hello World! |
| 2 | Hi World! |
+------+--------------+
2 rows in set (0.00 sec)

这里,我们先创建一个数据库mytest,之后操作导致这个数据库中有一个mytest表,导出的数据库都是文本格式的,后两种方法需要输入密码。

恢复一个已经导出的数据

#mysql -uroot -p123 mytest < mysql.mytest

#mysql -uroot -p mytest < mysql.mytest

这里,第二个方法需要输入密码。具体过程如下:

mysql> use mytest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> drop table mytable;
ERROR 1051 (42S02): Unknown table 'mytable'
mysql> drop table mytest;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)

#mysql -uroot -p123 mytest < mysql.mytest
# mysql -u root -p123

mysql> use mytest
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| mytest |
+------------------+
1 row in set (0.00 sec)

mysql> select * from mytest;
+------+--------------+
| num | name |
+------+--------------+
| 1 | Hello World! |
| 2 | Hi World! |
+------+--------------+
2 rows in set (0.00 sec)

这里,我们先把原来的数据库mytest里面的表删除,然后通过之前的备份mysql.mytest将数据库重新导入,然后就会查看发现数据库中的表被恢复过来了。

数据库操作命令

假设之前已经登陆了mysql服务,并且选择了test数据库,如下:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)

mysql> use test;show tables;
Database changed
Empty set (0.00 sec)

创建表mytest

mysql> create table mytest(num int, name varchar(50));

具体过程如下:

mysql> show tables;
Empty set (0.00 sec)
mysql> create table mytest(num int, name varchar(50));
Query OK, 0 rows affected (0.08 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| mytest |
+----------------+
1 row in set (0.00 sec)

这里,我们先"show tables;"检查当前数据库的表,发现为空;然后使用"create"命令创建表mytest;最后再使用"show tables;"可以发现我们创建的表已经存在了。

向表中插入一个元素

mysql> insert into mytest values(1,'Hello World!');

具体如下:

mysql> select * from mytest;
Empty set (0.00 sec)
mysql> insert into mytest values(1,'Hello World!');
Query OK, 1 row affected (0.00 sec)
mysql> select * from mytest;
+------+--------------+
| num | name |
+------+--------------+
| 1 | Hello World! |
+------+--------------+
1 row in set (0.00 sec)

这里,先用"select"查看表中所有元素,发现为空;然后使用"insert"插入一个元素;再用"select"查看所有元素,就发现了我们刚刚插入的那个元素。

更新表中所有元素的某列值

mysql> update mytest set name="Hello!";

具体如下:

mysql> insert into mytest values(2,'Hi World!');
Query OK, 1 row affected (0.00 sec)
mysql> select * from mytest;
+------+--------------+
| num | name |
+------+--------------+
| 1 | Hello World! |
| 2 | Hi World! |
+------+--------------+
2 rows in set (0.00 sec)
mysql> update mytest set name="Hello!";
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from mytest;
+------+--------+
| num | name |
+------+--------+
| 1 | Hello! |
| 2 | Hello! |
+------+--------+
2 rows in set (0.00 sec)

这里先使用"insert"插入一个元素,再用"select"查看发现表的两个元素;然后使用"update"更新列name;最后查看结果。

更新表中指定元素的某列值

mysql> update mytest set name="Hi!" where num=2;

具体如下:

mysql> update mytest set name="Hi!" where num=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from mytest;
+------+--------+
| num | name |
+------+--------+
| 1 | Hello! |
| 2 | Hi! |
+------+--------+
2 rows in set (0.00 sec)

这里,我们在前面的基础上,使用"update"命令更新num为2的元素的name为Hi;然后使用select查看相应的结果。

删除表中指定元素

mysql> delete from mytest where num=2;

具体如下:

mysql> select * from mytest;
+------+--------+
| num | name |
+------+--------+
| 1 | Hello! |
| 2 | Hi! |
+------+--------+
2 rows in set (0.00 sec)
mysql> delete from mytest where num=2;
Query OK, 1 row affected (0.00 sec)
mysql> select * from mytest;
+------+--------+
| num | name |
+------+--------+
| 1 | Hello! |
+------+--------+
1 row in set (0.01 sec)

这里,先使用"select"查看表元素;然后使用"delete"命令删除指定元素(num=2);最后再次使用"select"查看执行的结果。

删除数据库中指定的表

mysql> drop table mytest2;

具体如下:

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| mytest |
| mytest2 |
+----------------+
2 rows in set (0.00 sec)
mysql> drop table mytest2;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| mytest |
+----------------+
1 row in set (0.00 sec)

这里,先使用"show"查看所有表;然后使用"drop"删除表mytest2;最后使用"show"查看结果。另外如果没有"use test"的话,可以用"mysql> drop table test.mytest;"来删除test数据库中的表。

其它

几个常用的mysql相关的管理命令

  • mysql 基本文本的,显示和使用的mysql数据库。前面已经简单的提过用法;比如登录等。
  • mysqladmin 用来创建和维护mysql数据库的命令,前面已经简单的提过;
  • mysqldump 是用于备份数据库,前面已经简单的说明过; 软件开发网 www.mscto.com
  • myisamchk 用来修复.myi后缀的数据库文件;

备份数据库

#mysqldump -uroot -p test >/root/test/mysql20110512.sql
Enter password:

这里,需要在"Enter password:"后面输入你的密码,这样就备份了test数据库,备份文件为mysql20110512.sql。

导入备份的数据库

#mysql -uroot -p test < /root/test/mysql20110512.sql
Enter password:

这里,需要在"Enter password:"后面输入你的密码,这样就导入了先前备份的test数据库。

查看名为test的数据库

#mysqlshow -uroot -p test
Enter password:

输入之后,输出如下:

Database: test
+--------+
| Tables |
+--------+
+--------+

这样,会显示用户选择的数据库和表。

修复数据库

这里的过程,暂时没有实践过。

把mysqld服务器停下来

#service mysqld stop

检查数据库文件

#myisamchk ../var/linux/*.MYI

这里的命令意思是检查所有的.myi文件,数据库的目录在../var/linux/目录中.

修复有问题的数据库

#myisamchk -r ../var/linux/*.MYI

这里,如果前面的检查有问题,应该用-r参数来修复。

使用mysql创建一个用户的方法如下

  1. 使用root用户登录:

    $mysql --user=root --password=123
    

    这里,假设root用户的密码是123。这样会有 "mysql>"提示符号,提示你和mysql进行交互。操作这些命令的时候,应该把mysqld服务器打开。

  2. 运行mysql下面的命令,创建一个超级用户:

    mysql>grant all privileges on *.* to 'test'@'localhost'
    -> identified by 'password' with grant option;
    

    这里,创建了一个用户"test",其密码是"password".注意,这里第一行"@"字符的左右没有空格,之后回车就会有第二行的"-> "提示符号了。

退出mysql

mysql>exit

这里,也可以直接按[Ctrl]d退出mysql.

Linux下什么mysql区分大小写的时候

  • Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;

  • 用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;

    lower_case_table_names参数详解: lower_case_table_names = 0 其中 0:区分大小写,1:不区分大小写

参考

以上是我在搭建wordpress网站的时候临时学到的mysql相关知识的总结。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345