天天看點

mysql5.7運維基礎at 4180904 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 startupWarning: this binlog is either in use or was not closed properly.

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

mydb

; create table emm (id int)
563
642 BEGIN
741

mydb

; 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

會記錄日志為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

mydb

; insert into emm values(2)
428 COMMIT / xid=301 /
493
572
671

mydb

; 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