零零散散用过好多次mysql,但是一直没有记录过怎么使用,每次都去找教程,有些麻烦,所以在这记录下常用的到的一些东西,以后找也方便。
第一课:不小心把database mysql给删了
本来是要删除我自己建的另一个数据库,但是鬼使神差的执行了下面一句
drop database mysql;
然后,在要从外部操作数据库的时候,就出现了下面问题:
ERROR 1146 (42S02): Table 'mysql.user' doesn't exist
妈蛋,mysql都被哥删了,哪里来的mysql.user啊。。。所以,从此走上了救赎之路。
救赎第一步,把mysql kill掉(用/etc/init.d/mysql stop不成功,就killall了),然后用mysql_install_db来重新装系统的table。
sudo killall mysqld sudo mysql_install_db --user=mysql
哈,这时候再登入,就会出现下面这个问题,
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
造成这个问题的原因多种多样,搜一大堆解决方法,这里需要这样:
1、新建一个文本文档,比如/tmp/mysql-init.txt,把下面这一句拷贝进去(123456换做你密码)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘123456’);
2、用init文档来启动mysql
mysqld --init-file=/tmp/mysql-init.txt
这里主要目的是为了修改密码,所以,看到密码修改已经成功的话,就可以ctrl-z了。
然后就好了,再用mysql -u root -p打开数据库,everything is ok!
权限操作
设定root密码:
mysqladmin -u root password 'new_password'
注意,除了上面这句是在cmdline下执行的,其它都是在mysql内对database mysql执行操作,所以,记得use mysql。
修改其它用户密码,注意,没有where的话,就是修改所有用户密码:
mysql> use mysql; mysql> UPDATE user SET password=password('new_password') where user='root'; mysql> FLUSH PRIVILEGES;
删除空账户:
mysql> DELETE FROM user WHERE User = 'usr_name'; mysql> FLUSH PRIVILEGES;
建立新账号:
mysql> GRANT priv_type ON db_name.tb_name TO user IDENTIFIED BY ‘password’ eg: mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; mysql> GRANT ALL ON db1.* TO 'jeffrey'@'localhost'; mysql> GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost'; mysql> GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90; mysql> FLUSH PRIVILEGES;
如果NO_AUTO_CREATE_USER没有被使用,而且密码不为空,GRANT会自动新建用户,即可以不用 ‘CREATE USER’ 一句。
Create user的另一个前提是你拥有该权限;而也必须是你拥有的权限,才能GRANT给别人。
数据库/数据表的操作
建立数据库:
CREATE DATABASE db_name
使用数据库:
USE db_nam
删除数据库,也可以用来删除数据表:
DROP DATABASE [IF EXISTS] db_name
建立数据表:
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [select_statement]
例子:
craete database basic; use basic; create table basic( no char(4) name char(10) id char(10)); drop table basic
查看数据库或表
#show the list of database show databases; #use database before get db_name.tb use db_name;
#show tb list in thins databases show tables;
#show the columns of the table describe tb_name;
#the abobe one equel to show columns from tb_name
#show the contents of tb
select * from tb_name
暂时就用到这么多,整理完休息一下~