mysql 汇总
判断数据库是否存在的代码
drop database if exists test2;
create database if not exists
test2;
备份与还原
使用mysql脚本执行,备份与还原。
如果本机未安装mysql,要远程备份,貌似能成功。不做分析了。
授权
不过有些时候(有些版本)'%'不包括localhost,要单独对@'localhost'进行赋值,这事真让我遇上了,在对mysql5.1.32建立远程用户时。
分别对'%'和'localhost'授权解决。
相关参考资料:
MySQL
赋予用户权限命令的简单格式可概括为:
grant 权限 on 数据库对象 to 用户
一、grant 普通数据用户,查询、插入、更新、删除
数据库中所有表数据的权利。
grant select on testdb.* to common_user@'%'
grant
insert on testdb.* to common_user@'%'
grant update on testdb.* to
common_user@'%'
grant delete on testdb.* to common_user@'%'
或者,用一条 MySQL
命令来替代:
grant select, insert, update, delete on testdb.* to
common_user@'%'
二、grant
数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。
grant 创建、修改、删除 MySQL
数据表结构权限。
grant create on testdb.* to developer@'192.168.0.%';
grant
alter on testdb.* to developer@'192.168.0.%';
grant drop on
testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 外键权限。
grant
references on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 临时表权限。
grant create temporary tables on testdb.* to
developer@'192.168.0.%';
grant 操作 MySQL 索引权限。
grant index
on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 视图、查看视图源代码
权限。
grant create view on testdb.* to developer@'192.168.0.%';
grant
show view on testdb.* to developer@'192.168.0.%';
grant 操作
MySQL 存储过程、函数 权限。
grant create routine on testdb.* to
developer@'192.168.0.%'; -- now, can show procedure status
grant
alter routine on testdb.* to developer@'192.168.0.%'; -- now, you
can drop a procedure
grant execute
on testdb.* to developer@'192.168.0.%';
三、grant 普通 DBA 管理某个 MySQL 数据库的权限。
grant all
privileges on testdb to dba@'localhost'
其中,关键字 “privileges”
可以省略。
四、grant 高级 DBA 管理 MySQL
中所有数据库的权限。
grant all on *.* to dba@'localhost'
五、MySQL grant 权限,分别可以作用在多个层次上。
1. grant
作用在整个 MySQL 服务器上:
grant select on *.* to dba@localhost; -- dba 可以查询 MySQL
中所有数据库中的表。
grant all on *.* to dba@localhost; -- dba 可以管理
MySQL 中的所有数据库
2. grant 作用在单个数据库上:
grant select on testdb.* to
dba@localhost; -- dba 可以查询 testdb 中的表。
3. grant 作用在单个数据表上:
grant
select, insert, update, delete on testdb.orders to dba@localhost;
4.
grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to
dba@localhost;
5. grant 作用在存储过程、函数上:
grant execute on procedure
testdb.pr_add to 'dba'@'localhost'
grant execute on function
testdb.fn_add to 'dba'@'localhost'
六、查看 MySQL
用户权限
查看当前用户(自己)权限:
show grants;
查看其他 MySQL 用户权限:
show
grants for dba@localhost;
七、撤销已经赋予给 MySQL
用户权限的权限。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from”
即可:
grant all on *.* to dba@localhost;
revoke all on
*.* from dba@localhost;
八、MySQL grant、revoke
用户权限注意事项
1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
2.
如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“
grant select on
testdb.* to dba@localhost with grant option;
这个特性一般用不到。实际中,数据库权限最好由 DBA
来统一管理。
----------------------------------------------------------------------------------------------
授权命令GRANT
语句的语法如下:
GRANT privileges (columns)
ON what
TO user IDENTIFIEDBY
"password"
WITH GRANT OPTION
对用户授权
mysql>grant rights on
database.* to user@host identified by "pass";
例1:
增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
grant
select,insert,update,delete on *.* to test1@"%" Identified by "abc";
ON
子句中*.* 说明符的意思是“所有数据库,所有的表”
例2:
增加一个用户test2密码为abc,
让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作。
grant
select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
例子3
增加一个用户custom,他能从主机localhost、server.domain和whitehouse.gov连接。他只想要从
localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从所有3台主机存取customer
数据库。他想要从所有3台主机上使用口令stupid。
为了使用GRANT语句设置个用户的权限,运行这些命令:
shell>
mysql --user=root mysql
mysql> GRANT
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.* TO custom@localhost
IDENTIFIED BY 'stupid';
mysql> GRANT
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.* TO
custom@whitehouse.gov IDENTIFIED BY 'stupid';
mysql> GRANT
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.* TO custom@'%'
IDENTIFIED BY 'stupid';
==============================================
权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。
权限 列 Context
select Select_priv 表
insert Insert_priv 表
update
Update_priv 表
delete Delete_priv 表
index Index_priv 表
alter
Alter_priv 表
create Create_priv 数据库、表或索引
drop Drop_priv 数据库或表
grant
Grant_priv 数据库或表
references References_priv 数据库或表
reload Reload_priv
服务器管理
shutdown Shutdown_priv 服务器管理
process Process_priv 服务器管理
file
File_priv 在服务器上的文件存取
1.select、insert、update和delete权限
允许你在一个数据库现有的表上实施操作,是基本权限
2.alter权限允许你使用ALTER TABLE
3.create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表
如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库!
4.grant权限允许你把你自己拥有的那些权限授给其他的用户。
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。
可以同时列出许多被授予的单个权限。
例如,如果想让用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权:
GRANT
SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO 'user'@'%' IDENTIFIEDBY
"pass"
以上是我从别的地方拷贝过来后稍作修改的文字,下面自己写一些需要注意的东西。
为什么使用了Grant
all on db.* to user identified by "pass"后,在主机上访问数据库还会出现ERROR 1045 (28000):
Access denied for user 'user'@'localhost' (using password: YES)
的错误提示?
解答方法如下:运行命令 Grant all on db.* to 'user'@'localhost' identified by
"pass"
原因是:当不加@选项时,效果与加@'%'是一样的,'%'从名义上包括任何主机,(%必须加上引号,不然与@放在一起可能不会被辨认出。)不过有些时候(有些版本)'%'不包括localhost,要单独对@'localhost'进行赋值
脚本执行
系统部署或者开发过程中总会遇到一些数据需要先初始化到数据库中。遇到这种情况有多中解决的方法:
1.先把数据录入数据库,备份整个库。
这种方式的优点是方便,缺点是数据库表太多,调整的几率比较大,数据维护比较难。
2.把库结构和初始化数据分别备份出来,调整库表只需要备份库表结构。初始化数据可以不动。
。。。。
以上两种方式都是开发部署人员来维护,可是遇到不懂数据库的,没有数据库管理工具软件的机器就比较麻烦。我们老板就不懂数据库,但是他在给用户展示产品的时候又需要自己初始化化一些数据。于是想到用BAT文件来执行那些初始化语句。
test.bat文件内容:
mysql
--user=root --password=123456 test
test.sql文件的内容:
update user set
english_name='bat test' where
id='e605f35d-cf28-4ee9-abb8-812fe539c37a';
然后将bat文件发送到桌面快捷方式上,老板想要初始化的时候只要点一下就可以了,比较方便。
发现有个更详细的,来自:http://everlive.iteye.com/blog/222633
bat文件执行.sql文件
批处理文件.bat写法
- @echo off
- set errorlevel=0
- //修改为mysql安装路径
- set path_home_mysql="E:\tools\2008\MySql5.0\"
- set path_bin_mysql=%path_home_mysql%bin\
- //修改为mysql使用的数据名(test)
- set database_mysql=test
- //修改为mysql登陆用户名密码(root,sujian)
- set user_mysql=root
- set password_mysql=sujian
- //修改要执行的.sql文件(testsql.sql)
- %path_bin_mysql%mysql -u%user_mysql% -p%password_mysql% < testsql.sql
testsql.sql写SQL语句
例:alter table ddd add column ddddd varchar(10);
总结一下:
1.如果是执行数据库insert,update,delete语句的话,需要加入数据库名如:
%path_bin_mysql%mysql -u%user_mysql% -p%password_mysql%
% database_mysql %< mytestsql.sql
mytestsql.sql写的SQL语句:
update user set english_name='bat test' where
id='e605f35d-cf28-4ee9-abb8-812fe539c37a';
2.如果是执行数据库操作语句如:
%path_bin_mysql%mysql -u%user_mysql% -p%password_mysql%
< createtestdb.sql
createtestdb.sql的内容:
create database test;
3.可以将mysql命令改为mysqldump命令就可以导出数据库备份,如:
%path_bin_mysql%mysqldump -u%user_mysql% -p%password_mysql%
% database_mysql %
> backuptestdb.sql