零零散散用過好多次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
暫時就用到這么多,整理完休息一下~