mysql笔记
sql语句时刻都在用,所以就不容易忘记。但mysql管理相关的就用得少了,特别是用户管理用得更少,所以今天复习并尝试了各种管理的方法~做下笔记:
mysql的用户权限是用一个表来存放的,也就是mysql这一个系统数据库的user数据表。其实这一个表的字段除了password之外都是明文存放的,比较好理解。而password这一字段是用mysql自己的加密算法来进行加密的,而不是md5算法~了解了这些之后就明白我们可以通过sql语句来添加、修改和删除用户了,用sql来修改user表时要注意password这一字段的信息要用password()函数来加密~还有就是修改完用户表之后要记得用命令flush privileges来刷新权限列表。今天用update user set password=pasword("root")之后忘记用flush privileges来刷新就用新密码尝试重新登录,结果是密码错误的~因为还没有刷新修改,所以密码还是原来那个的~要修改user表必须要有对应的权限才可以的,一般是用root来修改吧~
以上是用sql语句来修改user表来达到管理用户的效果,而mysql也自带了一些管理工具来管理用户的:
mysqladmin:在shell下进行密码修改的命令,用法是mysqladmin -u username -poldpassword
password newpassword因为这个命令是在shell下执行的,所以要确保有足够的权限连接上mysql
server才可以进行修改密码的,用这个命令修改密码时不用再加上password()函数来进行加密~
还有两个是在mysql客户端进行用户管理的工具set password和grant ...identified by~使用set password语句,
mysql> set password for user@host password=password("password);
这语句也必须使用password()函数,但是不需要使用flush privileges语句。
使用grant语句
mysql> grant usage on dbname.tbname to user@host identified by "password";
这里password函数是不必要的,也不需要使用flush privilleges。
管理用户时也要注意给用户分配权限,可以对应某个数据库或某个表,权限有select,insert,update,delete,drop,create,alter,index这些都可以在mysql的user表下看到对应的字段,对应的赋值是y与n,默认是n也就是没权限,还有一些管理员权限的就不写出来了~还有两个用grant工具是用到的权限是all和usage,这是两个意思相反的权限,all是拥有全部权限,usage是只有连接进入mysql server的权限~
今天修改密码时不知道密码还没flush privileges;以为是自己修改错误,就顺便学习忘记mysql密码时应该怎么办:
mysql中文参考手册上的
1. 首先停止mysql server,可以用/etc/init.d/mysqld stop或者killall -TERM mysqld
你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。
2. 使用`--skip-grant-tables' 参数来启动 mysqld。 (LINUX下/X/bin/mysqld_safe
--skip-grant-tables , windows下X:\mysql\bin\mysqld.exe --skip-grant-tables)
3. 然后无密码登录到mysqld server ,
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
。你也可以这样做:`mysqladmin -h hostname -u user password 'new password''。
4. 载入权限表: `mysqladmin -h hostname flush-privileges' ,或者使用 SQL 命令`FLUSH
PRIVILEGES'。
5.killall -TERM mysqld
6.用新密码登陆
mysql的备份与恢复:
在本地备份表,用mysql客户端连接到mysql server后用select * from table into
outfile "filename";对应的恢复方法是load data infile "filename" [replace|ignore] into
table table_name;
本地或者远程备份数据库或表mysqldump -h -u -p dbname.tablename >filename;对应的恢
复数据方法是:mysql -u -p dbname.tablename <filename;
暂时先记下这些常用的mysql管理方法~