登录MySQL的命令是mysql, mysql 的使用语法如下:
mysql [-u username] [-h host] [-p[password]] [dbname]
username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:这个root用户不是Linux的系统用户。MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可。
[root@test1 local]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 25338 to server version: 5.1.2-alpha-standard
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
出现了“mysql>”提示符。
增加了密码后的登录格式如下:
mysql -u root -p
Enter password: (输入密码)
其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.04 sec)
Mysql刚安装完有两个数据库:mysql和test。mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行操作。
mysql> use mysql; (打开库,对每个库进行操作就要打开此库,类似于foxpro )
Database changed
mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+
6 rows in set (0.01 sec)
注意:MySQL中每个命令后都要以分号;结尾。
describe 表名;
select * from 表名;
例如:显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都 在此表中。
Select * from user;
create database 库名;
例如:创建一个名字位aaa的库
mysql> create database aaa;
use 库名;
create table 表名 (字段设定列表);
例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
use aaa;
mysql> create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
可以用describe命令察看刚建立的表结构。
mysql> describe name;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(3) | | PRI | NULL | auto_increment |
| xm | char(8) | YES | | NULL | |
| xb | char(2) | YES | | NULL | |
| csny | date | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
mysql> insert into name values('','张三','男','1971-10-01');
mysql> insert into name values('','白云','女','1972-05-20');
可用select命令来验证结果。
mysql> select * from name;
+----+------+------+------------+
| id | xm | xb | csny |
+----+------+------+------------+
| 1 | 张三 | 男 | 1971-10-01 |
| 2 | 白云 | 女 | 1972-05-20 |
+----+------+------+------------+
创建表后,需要填入内容。通过LOAD DATA和INSERT语句可以完成该任务。
假定你的宠物纪录描述如下。(假定在MySQL中期望的日期格式是YYYY-MM-DD;这可能与你习惯的不同。)
name | owner | species | sex | Birth | death |
Fluffy | Harold | Cat | F | 1993-02-04 | |
Claws | Gwen | Cat | M | 1994-03-17 | |
Buffy | Harold | dog | F | 1989-05-13 | |
Fang | Benny | dog | M | 1990-08-27 | |
Bowser | Diane | dog | M | 1979-08-31 | 1995-07-29 |
Chirpy | Gwen | bird | F | 1998-09-11 | |
Whistler | Gwen | bird | 1997-12-09 | ||
Slim | Benny | snake | M | 1996-04-29 | |
因为你是从一个空表开始的,填充它的一个简易方法是创建一个文本文件,每个动物各一行,然后用一个语句将文件的内容装载到表中。
你可以创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用NULL值。为了在你的文本文件中表示这些内容,使用N(反斜线,字母N)。例如,Whistler鸟的记录应为(这里值之间的空白是一个定位符):
name | owner | species | sex | birth | death |
Whistler | Gwen | Bird | N | 1997-12-09 | N |
想将文本文件“pet.txt”装载到pet表中,使用这个命令:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
请注意如果用Windows中的编辑器(使用 做为行的结束符)创建文件,应使用:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
-> LINES TERMINATED BY ' ';(在运行OS X的Apple机上,应使用行结束符' '。)如果你愿意,你能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。这对读入文件“pet.txt”的语句已经足够。如果该语句失败,可能是你安装的MySQL不与使用默认值的本地文件兼容。(关于如何更改请参见MYSQL中文使用手册5.6.4节,“LOAD DATA LOCAL安全问题”。)
例如:将张三的出生年月改为1971-01-10
mysql> update name set csny='1971-01-10' where xm='张三';
例如:删除张三的纪录。
mysql> delete from name where xm='张三';
drop database 库名;
drop table 表名;
使用GRANT
GRANT命令用来建立新用户,指定用户口令并增加用户权限。其格式如下:
mysql> GRANT <privileges> ON <what>-> TO <user> [IDENTIFIED BY "<password>"]-> [WITH GRANT OPTION]; |
正如你看到的,在这个命令中有许多待填的内容。让我们逐一地对它们进行介 绍,并最终给出一些例子以让你对它们的协同工作有一个了解。
<privileges>是一个用逗号分隔的你想要赋予的权限的列表。你可以指定的 权限可以分为三种类型:
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。CREATE: 建立新的数据库或数据表。DELETE: 删除表的记录。DROP: 删除数据表或数据库。INDEX: 建立或删除索引。INSERT: 增加表的记录。SELECT: 显示/搜索表的记录。UPDATE: 修改表中已存在的记录。 |
全局管理权限:
FILE: 在MySQL服务器上读写文件。PROCESS: 显示或杀死属于其它用户的服务线程。RELOAD: 重载访问控制表,刷新日志等。SHUTDOWN: 关闭MySQL服务。 |
特别的权限:
ALL: 允许做任何事(和root一样)。USAGE: 只允许登录--其它什么也不允许做。 |
这些权限所涉及到的MySQL的特征,其中的一些我们至今还没看到,而其中的绝大部分是你所熟悉的。
<what> 定义了这些权限所作用的区域。*.*意味着权限对所有数据库和数据表有效。dbName.*意味着对名为dbName的数据库中的所有数据表有效。dbName.tblName意味着仅对名为dbName中的名为tblName的数据表有效。你甚至还可以通过在赋予的权限后面使用圆括号中的数据列的列表以指定权限仅对这些列有效(在后面我们将看到这样的例子)。
<user>指定可以应用这些权限的用户。在MySQL中,一个用户通过它登录的用户名和用户使用的计算机的主机名/IP地址来指定。这两个值都可以使用%通配符(例如kevin@%将允许使用用户名kevin从任何机器上登录以享有你指定的权限)。
<password>指定了用户连接MySQL服务所用的口令。它被用方括号括起,说明IDENTIFIED BY "<password>"在GRANT命令中是可选项。这里指定的口令会取代用户原来的密码。如果没有为一个新用户指定口令,当他进行连接时就不需要口令。
这个命令中可选的WITH GRANT OPTION部分指定了用户可以使用GRANT/REVOKE命令将他拥有的权限赋予其他用户。请小心使用这项功能--虽然这个问题可能不是那么明显!例如,两个都拥有这个功能的用户可能会相互共享他们的权限,这也许不是你当初想看到的。
让我们来看两个例子。建立一个名为dbmanager的用户,他可以使用口令managedb从server.host.net连接MySQL,并仅仅可以访问名为db的数据库的全部内容(并可以将此权限赋予其他用户),这可以使用下面的GRANT命令:
mysql> GRANT ALL ON db.*-> TO dbmanager@server.host.net-> IDENTIFIED BY "managedb"-> WITH GRANT OPTION; |
现在改变这个用户的口令为funkychicken,命令格式如下:
mysql> GRANT USAGE ON *.*-> TO dbmanager@server.host.net-> IDENTIFIED BY "funkychicken"; |
请注意我们没有赋予任何另外的权限(the USAGE权限只能允许用户登录),但是用户已经存在的权限不会被改变。
现在让我们建立一个新的名为jessica的用户,他可以从host.net域的任意机器连接到MySQL。他可以更新数据库中用户的姓名和email地址,但是不需要查阅其它数据库的信息。也就是说他对db数据库具有只读的权限(例如,SELECT),但是他可以对Users表的name列和email列执行UPDATE操作。命令如下:
mysql> GRANT SELECT ON db.*-> TO jessica@%.host.net-> IDENTIFIED BY "jessrules";mysql> GRANT UPDATE (name,email) ON db.Users-> TO jessica@%.host.net; |
请注意在第一个命令中我们在指定Jessica可以用来连接的主机名时使用了%(通配符)符号。此外,我们也没有给他向其他用户传递他的权限的能力,因为我们在命令的最后没有带上WITH GRANT OPTION。第二个命令示范了如何通过在赋予的权限后面的圆括号中用逗号分隔的列的列表对特定的数据列赋予权限。
使用REVOKE
正如你所预期的那样,REVOKE命令是用来去除一个用户以前被赋予的权限的。命令的语法如下:
mysql> REVOKE <privileges> [(<columns>)]-> ON <what> FROM <user>; |
这个命令中各部分的功能和在上面的GRANT命令中时一样。要去除Jessica的合作者的DROP权限(例如,如果他经常错误地删除数据库和表),你可以使用下面的命令:
mysql> REVOKE DROP ON *.* FROM idiot@%.host.net; |
去除一个用户的登录权限大概是唯一不能使用REVOKE的。REVOKE ALL ON *.*会去除用户的所有权限,但是他还可以登录,要完全地删除一个用户,你需要在user表中删除相应的记录:
mysql> DELETE FROM user-> WHERE User="idiot" AND Host="%.host.net"; |
用新增的用户如果登录不了MySQL,在登录时用如下命令:
mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址)
备份单个据库时 mysqldump –u root –p --databases abc >/ abc.sql
Enter password: (输入密码)
备份多个据库时 mysqldump –u root –p --databases abc ,aaa > /abc.sql
Enter password: (输入密码)
备份全部据库时时,命令为mysqldump –u root --all-databases >/backup.sql
Enter password: (输入密码)
最稳妥的MYISAM数据库的备份方法。在默认的情况下,mysqldump程序会在备份每一个数据表之前给它加个读操作锁以防止它在备份过程中发生变化,但这并不能防止数据表B在mysqldump 程序备份数据表A的时候被修改。这就有可能导致一种后果:数据表A引用了数据表B里的某条记录,但这条记录却在mysqldump 程序备份数据表B之前被删除了。解决这个问题的办法是用上
--lock-all-tables 选项:
>mysqldump –u root –p –lock-all-tables databasename> /back.sql
恢复多个数据库时时,命令为 mysql –u root –p < my_back.sql
Enter password: (输入密码)
恢复单个数据库时时,命令为mysql –u root –p databasename < my_back.sql
Enter password: (输入密码)
采用linux 计划工具crontab
Crontab –e
按 “i”键开始编写计划。
*/1 * * * * mysqldump –u root –p --databases dbname1 dabname2 ….> /mysqlback/my_back.sql
注意:计划工具crontab的使用在《Neoshine Linux Server and Sybase 的安装.doc》有较详细介绍。
>mysqldump –u root –p “--where=db=’dbname’” --no-create-info
Mysql proc > back.sql (“”分两行写了,是一条命令)
在下面的例子里,db是proc数据表用来存放数据库名字的数据列,而--no-create-info 选项的作用是让mysql在为proc数据表制作备份时不生成create table命令,这样在恢复备份时就不会破坏proc数据表里属于其他数据库的存储过程了。
这里还有一个细节问题需要注意:在使用back.sql文件去恢复备份之前,必须要不proc数据表里属于dbname的现有SP全部删掉---------如果不这样做,当备份文件里的SP试图覆盖数据表里的现有SP时就将触发一个错误。
Delete from mysql.proc where db=’dbname’
注释dbname为数据库名。
恢复时命令是一样的
Mysql –u root –p mysql < back.sql
操作简单并且快捷的备份和恢复方法,也可以用SQLyog去实现,它的备份和恢复功能已经很完备(建议使用这种方法备份和恢复)。首先将备份的数据库备份成 xxx.sql文件,然后在将这个文件倒入到你想要恢复的数据库。(在倒入前,先要建立一个要空的数据库,用来将备份的数据库文件倒入。)具体的 操作可以参考第二部分MYSQL图形使用工具。
启动SQLyog首先连接要备份的数据库的服务器,然后右键点击要备份的数据库如下界面,然后选中export databases as sql statement左键单击,在 Export to file 输入要备份文件的地址,或点击后面的按纽指定位置。
然后点击Export,便执行将数据库备份到SQL文件。当Export successful,关闭该界面。
恢复时,同样用SQLyog连接到要恢复的数据库的服务器,然后建立好一个空的数据库,用来做恢复刚才备份SQL文件数据库。然后同样右键点击要恢复的数据库在弹出的窗口中,点按纽指定刚才备份的SQL文件。点击Execute按纽。便 进行了恢复数据库的操作。待执行完毕后,备份恢复的工作就完成了。