1. 程式人生 > >第十三章MySQL常用操作

第十三章MySQL常用操作

13.1 設定更改root密碼

實驗報錯

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

解決方法 ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

參考部落格

https://www.cnblogs.com/Lam7/p/6090975.html

設定密碼

如果忘記密碼

skip-grant

重啟mysql服務

空密碼登入

update user set password=password('aminglinux1') where user='root';

把skip-grant註釋掉,重啟服務,用新密碼登入

13.2 連線MySQL

-h 遠端主機

-S 只適合在本機

13.3 MySQL常用命令

show databases;

檢視全部資料庫

use mysql;

切換到哪一個庫下面

show tables;

檢視庫裡面的表

desc user;

查看錶裡面的欄位

show create table user\G; 

查看錶建立過程,G代表豎排顯示

select user();

檢視當前使用者

mysql的命令歷史

select database(); 

檢視當前使用的資料庫

create database db1;

建立資料庫

create table t1(`id` int(4),`name` char(40));

建立表

select version();

檢視資料庫版本

show status;

檢視資料庫的狀態

show variables like 'max_connect%';

檢視資料庫的引數

set global max_connet_errors=1000;

修改引數(臨時修改,永久生效需要到my.cnf裡面修改)

show processlist;

檢視佇列

show full processlist;

檢視完整佇列

13.4 MySQL使用者管理

grant all on *.* to 'user1'@'localhost' identified by '123456';

show grants for [email protected];

13.5 常用sql語句

select count(*) from mysql.user;

統計行數

select * from mysql.db\G;

select db from mysql.db;

查詢欄位

select db,user from mysql.db;

查詢兩個欄位

select * from mysql.db where host like '192.168.%'\G;

條件查詢

insert into db1.t1 values(1,'abc');

插入資料

update db1.t1 set name='aaa' where id=1;

更新表

truncate table db1.t1;

清空一個表

drop table db1.t1;

刪除一個表

 drop database db1;

刪除一個數據庫

13.6 MySQL資料庫備份恢復

 mysqldump -uroot -paminglinux1 mysql > /tmp/mysqlbak.sql

備份資料庫

mysql -uroot -paminglinux1 mysql2 < /tmp/mysqlbak.sql

恢復資料庫

mysqldump -uroot -paminglinux1 mysql user >/tmp/user.sql

備份表

mysqldump -uroot -paminglinux1 mysql user >/tmp/user.sql

恢復表

 mysql -uroot -paminglinux1 mysql2 < /tmp/user.sql

mysqldump -uroot -paminglinux1 -A >/tmp/mysql_all.sql

-A 備份所有資料庫

 mysqldump -uroot -paminglinux1 -d mysql2 >/tmp/mysql2.sql

-d 只備份表結構

 

課堂串講

1、設定更改root密碼

檢視mysql 啟動與否,若沒啟動就執行:/usr/local/mysql56/bin/mysql
ps aux |grep mysql  或 netstat -tulnp |grep 3306
執行mysql 命令,會出現:

-bash: mysql: command not found
就把mysql 新增到環境變數:
臨時新增:PAHT=$PATH:/usr/local/mysql56/bin
永久新增:echo "export PATH=$PATH:/usr/local/mysql56/bin"  >>/etc/profile 
再執行soucre /etc/profile 或  .  /etc/profile

mysql密碼的設定,給root使用者設定密碼

mysql -uroot password 'new_password'  或用下面的方式

如何修改密碼:
mysqladmin -uroot -p 'old_password' password 'new_password'   或用下面的方式

忘記密碼瞭如何修改:
  首先,得修改配製檔案:vim /etc/my.cnf
在[mysqld]模組下加入skip-grant ,然後重啟mysql服務:sed -i '/3306/a\skip-grant' /etc/my.cnf
重啟:/etc/init.d/mysqld restart

然後,切換資料庫:use mysql;
然後,再在資料庫裡面修改root密碼:update user set password=password('new_password')  where user='root';
這樣就把密碼給改回來了

重新測試,就把my.cnf給改回來:

 2、mysql的連線
mysql -uroot -p'password'
mysql -h127.0.0.1 -uroot -p'password'
mysql -S/tmp/mysql.sock -uroot -p'password'
mysql -uroot -p -e "show databases"

 

3、mysql常用命令

查詢有多少庫:show databases;
使用某個庫:use database_name;
檢視有多少個表:show tables;
檢視某張表裡的欄位:desc table_name:
檢視某張表建立時輸入的命令:show create table table_name\G;
檢視當前登陸有哪些使用者:select user();
檢視當前使用的哪個庫:select database();
檢視當前資料庫的版本:select version();
檢視配製檔案可定義的各種引數:show variables;
檢視目前的程序數:show processlist; 或 show full processlist;  #這是用得最多的(即檢視資料庫正在進行的操作)


建立一個數據庫:create database  db_name;
建立一張表:create table table_name('name'  types(length),'name'  type(length),........)

建立一張表:create table table_test(id int(10),name char(32),sex int(4));

13.4 mysql使用者管理

建立mysql使用者和授權,對單獨的使用者進行授權,因為不可能每一個使用者都去連線root,root的許可權是很大的,如果讓每個使用者都能夠使用root,這樣是非常不安全的。

 

建立使用者:

[[email protected] ~]# mysql -uroot -pabcd1234  登入到mysql

mysql> grant all on *.* to 'user1'@'127.0.0.1' identified by '123456a';    
Query OK, 0 rows affected (0.03 sec)

grant是授權,all表示所有許可權,前面的*表示庫名,例如mysql.*就表示mysql庫名下面所有的表,*.*就是所有庫名的表。@後面指定來源IP,也可以使用%表示所有IP。

也可以指定localhost方式登入,首先用root登入,然後把127.0.0.1改為localhost,這樣就可以不用加-h127.0.0.1也能夠登入了。

可以針對具體的許可權去授權

grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.52.1' identified by 'passwd';

還可以針對所有的IP去授權

grant all on db1.* to 'user3'@'%' identified by 'passwd';

複製程式碼

mysql> show grants for [email protected]'127.0.0.1';  檢視指定使用者的授權是什麼
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                            |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user1'@'127.0.0.1' IDENTIFIED BY PASSWORD '*B012E8731FF1DF44F3D8B26837708985278C3CED' |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

複製程式碼

檢視user2的授權

複製程式碼

mysql> grant all on *.* to 'user2'@'192.168.52.1' identified by '123456a';    首先要建立一個user2使用者
Query OK, 0 rows affected (0.00 sec)

  mysql> show grants for [email protected]'192.168.52.1';  檢視user2使用者的授權
 +--------------------------------------------------------------------------------------------------------------------------+
 | Grants for [email protected] |
 +--------------------------------------------------------------------------------------------------------------------------+
 | GRANT ALL PRIVILEGES ON *.* TO 'user2'@'192.168.52.1' IDENTIFIED BY PASSWORD '*B012E8731FF1DF44F3D8B26837708985278C3CED' |
 | GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'192.168.52.1' |
 +--------------------------------------------------------------------------------------------------------------------------+
 2 rows in set (0.00 sec)

 

複製程式碼

如果遇到IP不夠用,使用者除了要在192.168.52.1上登入,還想在192.168.52.2的IP登入,這個時候只需要把授權的命令全部執行一遍,只需要把IP改為192.168.52.2

如果需要複製一個使用者,假如知道使用者名稱,但是密碼不知道,就可以通過上面的方式進行設定,把2條命令複製執行,更改一下IP就可以了。

 

13.5 常用sql語句

select count(*) from mysql.user;                               檢視這個表的行數,庫和表中間有一個.作為分隔符。
select * from mysql.db;                                              檢視所有內容,如果一個表內容很多,不建議使用*檢視所有。
select db from mysql.db;                                           檢視欄位
select db,user from mysql.db;                                   檢視2個欄位
select * from mysql.db where host like '192.168.%'; 模糊查詢,使用這樣方式可以樹形顯示
insert into db1.t1 values (1, 'abc');                            插入欄位內容
update db1.t1 set name='aaa' where id=1;              更新欄位內容
truncate table db1.t1;                                                清空一個表裡面的內容,但是表的結構框架還會保留。
drop table db1.t1;                                                      徹底清空一個表
drop database db1;                                                   徹底清空一個數據庫

 

查看錶行數

檢視所有內容

mysql> select * from mysql.db\G;

檢視欄位

插入欄位內容

更新欄位內容

刪除一個表

清空一個表裡面的內容,但是表的結構框架還會保留。

徹底清空一個表和一個數據庫

在做徹底清空表或者資料庫時,一定要非常謹慎,如果沒有做備份,最好不要輕易執行清空操作。

 

13.6 mysql資料庫備份恢復

為了避免誤操作刪除一個表或資料庫,平常一定要養成資料庫備份的習慣。

備份資料庫

[[email protected] ~]# mysqldump -uroot -pabcd1234 mysql > /tmp/mysqlbak.sql
Warning: Using a password on the command line interface can be insecure.

恢復資料庫

[[email protected] ~]# mysql -uroot -pabcd1234 -e "create database mysql2"    建立一個新的資料庫mysql2
Warning: Using a password on the command line interface can be insecure.

[[email protected] ~]# mysql -uroot -pabcd1234 mysql2 < /tmp/mysqlbak.sql     把之前備份的資料庫恢復到新建的資料庫mysql2裡面去
Warning: Using a password on the command line interface can be insecure.

備份一個表

[[email protected] ~]# mysqldump -uroot -pabcd1234 mysql user > /tmp/user.sql
Warning: Using a password on the command line interface can be insecure.

恢復一個表

[[email protected] ~]# mysql -uroot -pabcd1234 mysql2 < /tmp/user.sql
Warning: Using a password on the command line interface can be insecure.

備份所有資料庫

[[email protected] ~]# mysqldump -uroot -pabcd1234 -A >/tmp/mysql_all.sql
Warning: Using a password on the command line interface can be insecure.

只備份表結構

[[email protected] ~]# mysqldump -uroot -pabcd1234 -d mysql2 > /tmp/mysql2.sql
Warning: Using a password on the command line interface can be insecure.

 

總結:

-A  備份所有的資料庫

-d  備份資料庫裡面的表結構,不備份資料。

備份一個表,先庫再表,中間用空格做一個分隔,恢復的時候只需要寫mysql就行了,不用寫表。

MySQLdump 只適合資料量不大的,如果資料量很大有上百G或者上T的資料量就不適用了。

擴充套件

xtrabackup原理相關 http://wangxin123.com/2017/01/20/%E9%80%9A%E8%BF%87Percona%20Xtrabackup%E5%AE%9E%E7%8E%B0%E6%95%B0%E6%8D%AE%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D/

增量備份 http://zhangguangzhi.top/2017/08/23/innobackex%E5%B7%A5%E5%85%B7%E5%A4%87%E4%BB%BDmysql%E6%95%B0%E6%8D%AE/#%E4%B8%89%E3%80%81%E5%BC%80%E5%A7%8B%E6%81%A2%E5%A4%8Dmysql

 

mysql5.7 root密碼更改

http://www.apelearn.com/bbs/thread-7289-1-1.html

 

myisam 和innodb引擎對比

http://www.pureweber.com/article/myisam-vs-innodb/

知乎上的答案

https://www.zhihu.com/question/20596402

 

mysql 配置詳解:

https://www.jb51.net/article/48082.htm

 

mysql調優:

http://www.aminglinux.com/bbs/thread-5758-1-1.html

 

同學分享的親身mysql調優經歷:

http://www.apelearn.com/bbs/thread-11281-1-1.html

 

SQL語句教程

http://www.runoob.com/sql/sql-tutorial.html

什麼是事務?事務的特性有哪些?

http://blog.csdn.net/yenange/article/details/7556094

根據binlog恢復指定時間段的資料

https://blog.csdn.net/lilongsy/article/details/74726002

相關擴充套件 https://blog.csdn.net/linuxheik/article/details/71480882

mysql字符集調整 http://xjsunjie.blog.51cto.com/999372/1355013