1,mysql關閉的幾種方法
mysqladmin -u root -p shutdown --mysqladmin關閉mysql
/etc/init.d/mysqld stop --mysqld腳本關閉
systemctl stop mysqld --mysql腳本關閉
kill -9 程序 --先檢視mysqld程序,但不推薦方法
2,mysql修改密碼
1
alter user root@'localhost' identified by '654321';
flush privileges;
2
mysqladmin -u root -p password 123456
3
mysql> use mysql
mysql> update mysql.user set authentication_string=password('6543216') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('7654321');
忘記root密碼,修root修改密碼
/etc/init.d/mysqld stop --關閉mysql
mysqld_safe --skip-grant-tables & --安全模式啟動
Query OK, 0 rows affected (0.00 sec)
/etc/init.d/mysqld restart --重新開機mysql
mysql基礎文法
1,mysql添加普通使用者
mysql> create user 'test'@'localhost' identified by '123456';
mysql> flush privileges;
mysql> grant select on . to 'test2'@'localhost' identified by '654321';
2 授權mysql使用者和回收權限
mysql> grant select,insert on mydb.* to 'test'@'localhost';
mysql> show grants for 'test'@'localhost'; --檢視權限
mysql> revoke select on mydb.* from 'test'@'localhost'; --回收select權限
基礎語句
create database mydb default charset utf8; --建立資料庫
mysql> use mydb; --使用資料庫
mysql> create table emm(id int); --建立表
mysql> insert into emm value(1); --插入資料
mysql> select * from emm; --檢視表中資料
mysql> update emm set id=2 where id=1; --更新資料
mysql> show tables; --檢視庫中表
mysql> desc emm; --檢視表結構
mysql> alter table emm add column age int after id; --添加一個字段
mysql> show engines; --檢視資料庫支援的引擎
mysql> show variables like '%char%'; --檢視字元集
mysql> show variables like '%max_con%'; --檢視預設連接配接數
mysql> show OPEN TABLES where In_use > 0; --檢視正在使用的表
mysql> SHOW ENGINE INNODB STATUS; --檢視innodb日志
mysql> drop table emm; --删除表
mysql> delete from emm; --清除表資料,不清楚表空間
mysql> truncate table emm; --清楚資料,清楚空間
mysql> drop database mydb; --删除資料庫
運維基礎文法
設定慢查詢日志
mysql> show variables like 'long%';
Variable_name | Value |
---|---|
long_query_time | 10.000000 |
1 row in set (0.01 sec)
mysql> show variables like 'slow%'; | |
---|---|
slow_launch_time | |
slow_query_log | OFF |
slow_query_log_file | /usr/local/src/mysql/data/iZwz9hzc7pd8k6u859n9rzZ-slow.log |
3 rows in set (0.00 sec)
--檢視慢查詢日志是關閉的,如果是線上項目可以用語句設定開啟,然後再my.cnf裡面配置。
mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.01 sec)
mysql> set global long_query_time=3;
修改/etc/my.cnf
slow_query_log = ON
slow_query_log_file = /usr/local/src/mysql/data/iZwz9hzc7pd8k6u859n9rzZ-slow.log
long_query_time = 3
重新開機mysql,測試
mysql> select sleep(4);
[root@iZwz9hzc7pd8k6u859n9rzZ ~]# tail -100 /usr/local/src/mysql/data/iZwz9hzc7pd8k6u859n9rzZ-slow.log
/usr/local/src/mysql/bin/mysqld, Version: 5.7.23-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
Rows_examined: 0
SET timestamp=1536025164;
select sleep(4); --記錄到了剛才的語句
二進制日志開啟
cat /etc/my.cnf
log-bin=mysql-bin
binlog_format=mixed --混合模式
server-id = 1
sync-binlog = 1 --保證資料庫的安全性,但影響一定的性能
expire_logs_days = 10 --日志自動删除10天以前的
mysql> show master logs; | |
---|---|
Log_name | File_size |
mysql-bin.000001 | 177 |
mysql-bin.000002 | |
mysql-bin.000003 | |
mysql-bin.000004 | |
mysql-bin.000005 | |
mysql-bin.000006 | |
mysql-bin.000007 | 573 |
mysql-bin.000008 | |
mysql-bin.000009 | |
mysql-bin.000010 | 1781 |
mysql-bin.000011 | 876 |
mysql-bin.000012 | 4132 |
mysql-bin.000013 | 154 |
13 rows in set (0.00 sec)
删除二進制日志
mysql> purge master logs to 'mysql-bin.000009';
删除09以前的日志
mysql> purge master logs before '2018-09-04';
删除9月4号之前的日志
還可以把expire_logs_days = 10 設定短也可以删除mysqlbinlog
mysql> reset master;
删除所有mysqlbinlog
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqlbinlog /usr/local/src/mysql/data/mysql-bin.000001
/!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1/;
/!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0/;
DELIMITER /!/;
at 4
180904 9:58:17 server id 1 end_log_pos 123 CRC32 0xec6dd750 Start: binlog v 4, server v 5.7.23-log created 180904 9:58:17 at startup
Warning: this binlog is either in use or was not closed properly.
ROLLBACK/!/;
BINLOG '
ueaNWw8BAAAAdwAAAHsAAAABAAQANS43LjIzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC55o1bEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AVDXbew=
'/!/;
檢視二進制裡面的内容
mysql> show binlog events in 'mysql-bin.000001'; | |||||
---|---|---|---|---|---|
Pos | Event_type | Server_id | End_log_pos | Info | |
Format_desc | 123 | Server ver: 5.7.23-log, Binlog ver: 4 | |||
Previous_gtids | |||||
Anonymous_Gtid | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | |||
Query | 334 | create database mydb default charset utf8 | |||
399 | |||||
498 | use ; create table emm (id int) | ||||
563 | |||||
642 | BEGIN | ||||
741 | ; insert into emm values(1) | ||||
Xid | 772 | COMMIT / xid=20 / |
10 rows in set (0.00 sec)
檢視二進制日志裡面的事件
資料庫備份
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p mydb>~/mydb.sql
Enter password:
--備份整個庫
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p -d mydb>~/mydb.sql
--備份表結構
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p mydb adds>~/adds.sql
--導出某一個或者多個表
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p -d mydb adds>~/adds.sql
--導出一個表或者多個表的表結構
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -uroot -p mydb --ignore-table=mydb.emm>~/ddd.sql
--忽略某個表導出資料
資料還原
mysql> drop database mydb;
Query OK, 2 rows affected (0.04 sec)
--先删除資料庫,再建立一個空的mydb資料庫
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysql -u root -p mydb .sql
Enter password
進去檢視資料正常
但是我們這種備份隻能定時去備份,但是現實工作中,資料庫是一直運作的,是以當線上資料庫被執行了drop操作的話,那怎麼恢複過來呢?
首先需要定時備份的sql記錄二進制的值
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p --databases mydb --lock-all-tables --flush-logs --master-data=2 > /opt/22.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
--
-- Current Database: mydb
mydb
會記錄日志為000002的154位置
現在再在資料庫插入資料,然後删除資料庫,我們還原步驟。
mysql>
mysql> show tables; |
---|
Tables_in_mydb |
adds |
emm |
2 rows in set (0.00 sec)
mysql> insert into emm values(2)
-> ;
Query OK, 1 row affected (0.01 sec)
mysql> insert into emm values(3);
mysql>
--插入了兩條資料
4080 | |
702 |
--02日志有變化了
Query OK, 2 rows affected (0.03 sec)
删除資料庫,建立一個空的資料庫
mysql> create database mydb default charset utf8;
Query OK, 1 row affected (0.00 sec)
mysql> use mydb;
Database changed
mysql> source /opt/22.sql;
--導入定時備份的資料
mysql> show binlog events in 'mysql-bin.000002'; | |||||
---|---|---|---|---|---|
298 | |||||
397 | ; insert into emm values(2) | ||||
428 | COMMIT / xid=301 / | ||||
493 | |||||
572 | |||||
671 | ; insert into emm values(3) | ||||
COMMIT / xid=302 / | |||||
767 | |||||
859 | drop database mydb |
--檢視到drop database 在767位置
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqlbinlog --no-defaults --stop-position="767" /usr/local/src/mysql/data/mysql-bin.000002| mysql -uroot -p6543216 mydb
mysql: [Warning] Using a password on the command line interface can be insecure.
--導入mysql差異日志
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysql -u root -p6543216 -e 'use mydb;select * from emm;'
id |
資料庫已經恢複完畢,隻要弄清原理就很容易
資料庫優化
一般mysql的使用的較多的是mysiam和innodb引擎
是以一般隻要對這兩種引擎優化就可以滿足工作大多用途
max-allowed-packet = 16M 最大允許的包大小,太小會引起資料插入不到資料庫
max-connections = 500 最大連接配接數,太小會線上用戶端連結失敗,too many concents等
innodb-buffer-pool-size = 2G innodb資料緩存池大小,一般設定記憶體的70%
myisam_sort_buffer_size = 8M myisam索引緩沖區
還有很多參數需要優化,包含xtrabackup熱備等
本文來自 qq_34962337 的CSDN 部落格 ,全文位址請點選:
https://blog.csdn.net/qq_34962337/article/details/82356384?utm_source=copy我的阿裡雲優惠券位址:
https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=3ow2kbko