天天看点

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