第十三章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