MYSQL 常用總結【基礎】

文章是之前總結的,還不是很完善。對於新手來說也許有一些幫助吧。

文章難免會出現一些錯誤,請大家指出。


Mysql 忘記root密碼
在/etc/my.cfg [mysqld]下面添加
skip-grant-tables
或是
skip-grant

重啓MySQL
use mysql;
UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
mysql flush privileges;
將my.cfg文件修改回來 ,重啓MySQL即可。

二、在啓動Mysql服務器時加上參數--skip-grant-tables來跳過授權表的驗證
    (./safe_mysqld --skip-grant-tables &),這樣我們就可以直接登陸Mysql服務器,
    然後再修改root用戶的口令,重啓Mysql就可以用新口令登陸了。


添加環境變量
PATH=$PATH:/usr/local/mysql/bin  加入到/etc/profile中


只需本機使用Mysql服務
在啓動時還可以加上--skip-networking參數使Mysql不監聽任何TCP/IP連接
(./safe_mysqld --skip-networking &),增加安全性。(非常推薦)


查看支持的存儲引擎
 mysql> show engines;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                    | Transactions | XA   | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                      | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                         | NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance    | NO           | NO   | NO         |
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO   | NO         |
+------------+---------+------------------------------------------------------------+--------------+------+------------

 
查看當前MySQL的默認數據引擎
show variables like '%engine%';
mysql> show variables like '%engine%';
+---------------------------+--------+
| Variable_name             | Value  |
+---------------------------+--------+
| engine_condition_pushdown | ON     |
| storage_engine            | MyISAM |
+---------------------------+--------+
2 rows in set (0.00 sec)


查看和修改最大連接數
  使用MySQL 數據庫的站點,當訪問連接數過多時,就會出現 "Too many connections" 的錯誤。
  出現這種錯誤有兩種情況,一種是網站訪問量實在太大,服務器已經負擔不起,此時就應該考慮負載均衡或者其它減少服務器壓力的辦法。另一種情況就是 MySQL 的最大連接數設置得太小,當訪問量稍大就出現連接過多的錯誤。
 
  show variables like '%max_connections%';
  要對 mysql 的最大連接數進行修改,只需要在 my.cnf 配置文件裏面修改 max_connections 的值,然後重啓 mysql 就行。
  如果 my.ini 文件中沒有找到 max_connections 條目,可自行添加以下條目。
 
  max_connections = 220
  或是
  mysql>set global max_user_connections = 200; [僅本次修改有效]
 

實時查看mysql當前連接數
前提:對用戶和遠程主機有授權
mysql> grant all on *.* to [email protected] identified by 'ocean@mx';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


[root@OceanV ~]# mysqladmin -uroot -p -h192.168.9.9  processlist
Enter password:
+----+------+-------------------+----+---------+------+-------+------------------+
| Id | User | Host              | db | Command | Time | State | Info             |
+----+------+-------------------+----+---------+------+-------+------------------+
| 41 | root | localhost         |    | Sleep   | 13   |       |                  |
| 56 | root | 192.168.9.9:45422 |    | Query   | 0    |       | show processlist |
+----+------+-------------------+----+---------+------+-------+------------------+

只查看當前連接數(Threads就是連接數)
[root@OceanV ~]# mysqladmin -uroot -pocean@mx status
Uptime: 4449  Threads: 2  Questions: 18697  Slow queries: 0  Opens: 77  Flush tables: 1  Open tables: 31  Queries per second avg: 4.202
或是 show full processlist;
mysql> show full processlist;
+----+------+-----------+-------+---------+------+-------+-----------------------+
| Id | User | Host      | db    | Command | Time | State | Info                  |
+----+------+-----------+-------+---------+------+-------+-----------------------+
| 41 | root | localhost | NULL  | Query   |    0 | NULL  | show full processlist |
| 65 | root | localhost | cacti | Sleep   |    4 |       | NULL                  |
| 68 | root | localhost | NULL  | Sleep   |   27 |       | NULL                  |
+----+------+-----------+-------+---------+------+-------+-----------------------+
3 rows in set (0.00 sec)
看一下所有連接進程,注意查看進程等待時間以及所處狀態 是否locked
如果進程過多,就把進程打印下來,然後查看.
mysql -e 'show full processlist;' -p > 111
查找非locked的進程,一般就是當前執行中卡死,導致後面的進程排隊的原因。


查看MySQL連接數和當前用戶Mysql連接數
先用管理員身份進入mysql提示符。
mysql -uroot -pxxxx
mysql >show processlist;         #可以顯示前100條連接信息
       show full processlist;    #可以顯示全部。隨便說下,如果用普通賬號登錄,就只顯示這用戶的。

修改MySQL監聽端口
 1.如果你安裝的是系統自帶的rpm包的情況:
 修改 /etc/my.cnf
 [mysqld]
 datadir=/var/lib/mysql
 port=3300                    #修改成你自己想要的端口
  socket=/var/lib/mysql/mysql.sock
 [mysql.server]
 user=mysql
 basedir=/var/lib
 [safe_mysqld]
 err-log=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pid
 保存退出。
 2.如果你安裝的是其他源碼包或者在同一服務器上安裝多個mysqld服務的情況:
  同樣的配置,找出my.cnf 文件。添加port= 端口號
 需要注意的是
 [client]
 port            = 3300
 這裏也要改一下。
 
 
 
在同一臺機器上配置兩個MySQL服務(跑兩個端口)
cd /usr/local/; cp -r mysql mysql_2; cd mysql_2;
初始化mysql2: ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2   
拷貝配置文件:cp /etc/my.cnf ./my.cnf
修改配置文件相關參數:vim my.cnf  #更改port 以及 socket
啓動:/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &
若開機啓動它,需加入到 /etc/rc.local中
 



查看mysql設置參數  
$mysqladmin  -u root -p variables;

查詢參數  
    1) \g  在語句尾,同;
  2) \G  在語句尾,使查詢結果以豎形輸出
  3) \c  在語句尾,使當前語句不執行

清屏
\! clear

切換mysql命令結尾符
dlimeter 特殊符;

查看當前版本和當前日期
此命令要求mysql服務器告訴你它的版本號和當前日期

mysql select version(),current_date();
+-------------------------------+----------------+
| version()                     | current_date() |
+-------------------------------+----------------+
| 4.1.7Boco_DC_Group_2004-11-24 | 2008-06-18     |
+-------------------------------+----------------+
1 row in set (0.00 sec)

當前是哪個用戶 
select user();

查看mysql狀態
show status;

修改mysql參數
show variables like 'max_connect%'; set global max_connect_errors = 1000;
查看mysql隊列 show processlist;

查看mysql是否在監聽端口命令
netstat -tl | grep mysql

 
開啓服務器  
    $/etc/rc.d/init.d/mysqld start
  或
  $mysqld_safe  --user=mysql &
停止服務器
  $/etc/rc.d/init.d/mysqld stop
  或
  $mysqladmin  shutdown  -u root -p
    或
  /usr/bin/mysqladmin -u root -p shutdown

 
賦權  
mysqlgrant all on dbname.* to username@ identified by 'localhostpassword'
刷新權限表  mysqlflush privileges;

優化表  
mysqloptimize  table  tblA,tblB;
或 [進行優化並檢查修復任務]
$mysqlcheck  -o  dbname  tblA tblB  tblC   -u root  -p

對錶進行分析  
mysqlanalyze  table  tblA;

$mysqlcheck  -a dbname [tblA  tblB tblC ] -u root -p

對錶進行檢查  
mysqlcheck table tblA,tblB,tblC;

 
連接服務器  
mysql -u   cnscn
        -h   192.168.0.1
        [-D  dbname]
        [-P  3306]
   [--protocol=name]    The protocol of connection (tcp,socket,pipe,memory)
        [-S, --socket=name]  連接所用的套接字文件
        [--character-sets-dir=name]  字符集所位於的目錄           
        [--default-character-set=name]   默認的字符集
        [-E, --vertical]  垂直地打列出查詢輸出

從命令行登錄MySQL數據庫服務器
1.登錄使用默認3306端口的MySQL
/usr/local/mysql/bin/mysql -u root -p

2.通過TCP連接管理不同端口的多個MySQL(注意:MySQL4.1以上版本纔有此項功能)
/usr/local/mysql/bin/mysql -u root -p --protocol=tcp --host=localhost --port=3307

3.通過socket套接字管理不同端口的多個MySQL
/usr/local/mysql/bin/mysql -u root -p --socket=/tmp/mysql3307.sock

4.通過端口和IP管理不同端口的多個MySQL
/usr/local/mysql/bin/mysql -u root -p -P 3306 -h 127.0.0.1

退出mysql命令:
exit(回車) 提示“bye”

修改登錄密碼
MySQL默認沒有密碼,安裝完畢增加密碼的重要性是不言而喻的。
usr/bin/mysqladmin -u root password 'new-password'
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

 
         
創建數據庫  
Mysql>create database dbname;

顯示數據庫列表  
mysql>show databases;

顯示數據表列表  
mysql>show tables;

顯示數據表的結構
describe 表名;

desc tablesname;

顯示錶的創建信息
show create table tablesname;


創建名稱爲ocean的數據庫
CREATE DATABASE ocean;
DROP tables tablesname;

將表中記錄清空
delete from tablesname;


建表
use 庫名;create table 表名(字段設定列表);


刪除名稱爲ocean的數據庫
DROP DATABASE ocean;

選擇ocean數據庫
USE ocean;

(USE 和 QUIT 命令不需要分號結束。)

常用sql命令
查詢 select count(*) from mysql.user; select * from mysql.db; select * from mysql.db where host like '10.0.%';
插入 update db1.t1 set name='aaa' where id=1; 
清空表 truncate table db1.t1;
刪除表 drop table db1.t1;
刪除數據庫 drop database db1;
修復表 repair table tb1 [use frm];



表操作SQL語句
1、顯示當前數據庫中存在什麼表
SHOW TABLES;

2、創建數據庫表zhangyan
在mysql後粘貼以下SQL語句,存儲引擎爲MYISAM,字段id爲主鍵、唯一索引

CREATE TABLE `zhangyan` ( `id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT , `username` VARCHAR( 20 ) NOT NULL , `password` CHAR( 32 ) NOT NULL , `time` DATETIME NOT NULL , `number` FLOAT( 10 ) NOT NULL , `content` TEXT NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ;

3、查看zhangyan表結構
DESCRIBE zhangyan;

4、從表中檢索信息
4.1、從zhangyan表中檢索所有記錄
SELECT * FROM zhangyan;

4.2、從zhangyan表中檢索特定的行:字段username等於abc,字段number等於1,按字段id降序排列
SELECT * FROM zhangyan WHERE username = abc AND number=1 ORDER BY id DESC;

4.3、從zhangyan表中檢索指定的字段:username和password
SELECT username, password FROM zhangyan;

4.4、從zhangyan表中檢索出唯一的不重複記錄
SELECT DISTINCT username FROM zhangyan;

5、插入信息到zhangyan表
INSERT INTO zhangyan (id, username, password, time, number, content) VALUES (, abc, 123456,
2007-08-06 14:32:12, 23.41, hello world);

6、更新zhangyan表中的指定信息
UPDATE zhangyan SET content = hello china WHERE username = abc;

7、刪除zhangyan表中的指定信息
DELETE FROM zhangyan WHERE id = 1;

8、清空zhangyan表
DELETE FROM zhangyan;

9、刪除zhangyan表
DROP TABLE zhangyan;

10、更改表結構,將zhangyan表username字段的字段類型改爲CHAR(25)
ALTER TABLE zhangyan CHANGE username username CHAR(25);

11、將當前目錄下的mysql.sql導入數據庫
SOURCE ./mysql.sql;

12、MySQL中將字符串aaa批量替換爲bbb的SQL語句
UPDATE表名SET字段名=REPLACE(字段名,aaa,bbb);
 
13、修復損壞的表
用root帳號從命令行登錄MySQL:  
mysql-uroot-p
選定數據庫名(本例中的數據庫名爲student):use  student;
修復損壞的表(本例中要修復的表爲smis_user_student):  repair tables mis_user_student;udent;



一個建庫和建表以及插入數據的實例
drop database if exists school; //如果存在SCHOOL則刪除
create database school; //建立庫SCHOOL
use school; //打開庫SCHOOL
create table subject //建立表
(
id int(3) auto_increment not null primary key,
name char(10) not null
); //建表結束
//以下爲插入字段
insert into subject(name) values('語文');
insert into subject(name) values('數學');
insert into subject(name) values('英語');

create table student //建立表
(
id int(4) auto_increment not null primary key;
no char(4) not null,
name char(10) not null,
); //建表結束
//以下爲插入字段
insert into student(no,name) values('0001','張三');
insert into student(no,name) values('0002','李四');

create table grade //建立表
(
student_no char(4) not null,
subject_id int(3) not null,
score int(3) not null default 0 null,
primary key(student_no,subject_id);
); //建表結束
我們這裏建立的grade表student_no參考student的no字段,subject_id參考subject的id字段 它們存在約束關係,
我們給grade表添加兩個外鍵:
subject_id字段:
alter table grade add foreign key(subject_id) refrences subject(id) on delete cascade on update cascade;
student_no字段:
alter table grade add foreign key(student_no) refrences student(no) on delete cascade on update cascade;
這個時候會報錯,因爲我們沒有把student表中的no設爲索引,前一句沒有問題是因爲subject的id是主鍵,已經是索引了
我們給student的no添加索引
alter table student add index(no);
然後我們再
alter table grade add foreign key(student_no) refrences student(no);
這樣就OK了

其他一些操作:
添加主鍵: alter table 表名 add primary key(列名)
刪除主鍵: alter table 表名 drop primary key;
給某列改名: alter table 表名 change 列名 屬性列表 比如alter table student change id no char(4)
添加某列:
1 在表的最前面添加列 比如給student表添加id屬性 放在表的最前面
alter table student add id int(4) not null auto_increment primary key first;
2 在表的某個列後加列 比如給student表添加id屬性 放在列no的最前面
alter table student add a int(11) afer no;
刪除某列: alter table 表名 drop column 列名;
更改某列屬性 比如修改student no字段屬性 alter table student modify no char(4);
添加索引:alter table 表名 add index 列名
刪除索引:alter table 表名 drop index 列名
刪除外鍵:alter table 表名 drop foreign key 約束名
limit的使用:
select * from 表名 limit 2;//如果只給定一個參數,它表示返回最大的記錄行數目
select * from 表名 limit 1,3;// 第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目



更改MySQL目錄
MySQL默認的數據文件存儲目錄爲/var/lib/mysql。假如要把目錄移到/home/data下需要進行下面幾步:
1、home
目錄下建立data目錄
cd /home
mkdir data
2、把MySQL服務進程停掉:
mysqladmin -u root -p shutdown
3、把/var/lib/mysql整個目錄移到/home/data
mv /var/lib/mysql /home/data/
這樣就把MySQL的數據文件移動到了/home/data/mysql下
4、找到my.cnf配置文件
如果/etc/目錄下沒有my.cnf配置文件,請到/usr/share/mysql/下找到*.cnf文件,拷貝其中一個到/etc/並改名爲my.cnf)中。命令如下:
[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
5、編輯MySQL的配置文件/etc/my.cnf
爲保證MySQL能夠正常工作,需要指明mysql.sock文件的產生位置。 修改socket=/var/lib/mysql/mysql.sock一行中等號右邊的值爲:/home/mysql/mysql.sock 。
操作如下:
   vi  my.cnf
   # The MySQL server
    [mysqld]
    port   = 3306
   #socket  = /var/lib/mysql/mysql.sock(原內容,爲了更穩妥用#註釋此行)
    socket  = /home/data/mysql/mysql.sock   (加上此行)
6、修改MySQL啓動腳本/etc/rc.d/init.d/mysql
  最後,需要修改MySQL啓動腳本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等號右邊的路徑改成你現在的實際存放路徑:home/data/mysql。
  [root@test1 etc]# vi /etc/rc.d/init.d/mysql
  #datadir=/var/lib/mysql    (註釋此行)
  datadir=/home/data/mysql   (加上此行)
7、重新啓動MySQL服務
  /etc/rc.d/init.d/mysql start
  如果工作正常移動就成功了,否則對照前面的7步再檢查一下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章