hmysql5.7安装请参考
https://blog.csdn.net/qq_34962337/article/details/82353082
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');
mysql> flush privileges;
5
忘记root密码,修root修改密码
/etc/init.d/mysqld stop --关闭mysql
mysqld_safe --skip-grant-tables & --安全模式启动
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)
/etc/init.d/mysqld restart --重启mysql
3,mysql基础语法
1,mysql添加普通用户
mysql> create user 'test'@'localhost' identified by '123456';
mysql> flush privileges;
mysql> grant select on *.* to 'test2'@'localhost' identified by '654321';
mysql> flush privileges;
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权限
mysql> flush privileges;
3
基础语句
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; --删除数据库
4
运维基础语法
设置慢查询日志
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%';
+---------------------+------------------------------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------------------------------+
| slow_launch_time | 2 |
| 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;
Query OK, 0 rows affected (0.00 sec)
修改/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
/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
# Time: 2018-09-04T01:39:24.296576Z
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 4.000316 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1536025164;
select sleep(4); --记录到了刚才的语句
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 | 177 |
| mysql-bin.000003 | 177 |
| mysql-bin.000004 | 177 |
| mysql-bin.000005 | 177 |
| mysql-bin.000006 | 177 |
| mysql-bin.000007 | 573 |
| mysql-bin.000008 | 177 |
| mysql-bin.000009 | 177 |
| 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';
Query OK, 0 rows affected (0.01 sec)
删除09以前的日志
mysql> purge master logs before '2018-09-04';
Query OK, 0 rows affected (0.01 sec)
删除9月4号之前的日志
还可以把expire_logs_days = 10 设置短也可以删除mysqlbinlog
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
删除所有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';
+------------------+-----+----------------+-----------+-------------+-------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------+
| mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.23-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000001 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000001 | 219 | Query | 1 | 334 | create database mydb default charset utf8 |
| mysql-bin.000001 | 334 | Anonymous_Gtid | 1 | 399 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000001 | 399 | Query | 1 | 498 | use `mydb`; create table emm (id int) |
| mysql-bin.000001 | 498 | Anonymous_Gtid | 1 | 563 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000001 | 563 | Query | 1 | 642 | BEGIN |
| mysql-bin.000001 | 642 | Query | 1 | 741 | use `mydb`; insert into emm values(1) |
| mysql-bin.000001 | 741 | Xid | 1 | 772 | COMMIT /* xid=20 */ |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------+
10 rows in set (0.00 sec)
查看二进制日志里面的事件
5
数据库备份
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p mydb>~/mydb.sql
Enter password:
--备份整个库
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p -d mydb>~/mydb.sql
Enter password:
--备份表结构
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p mydb adds>~/adds.sql
Enter password:
--导出某一个或者多个表
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -u root -p -d mydb adds>~/adds.sql
Enter password:
--导出一个表或者多个表的表结构
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysqldump -uroot -p mydb --ignore-table=mydb.emm>~/ddd.sql
Enter password:
--忽略某个表导出数据
数据还原
mysql> drop database mydb;
Query OK, 2 rows affected (0.04 sec)
--先删除数据库,再创建一个空的mydb数据库
[root@iZwz9hzc7pd8k6u859n9rzZ data]# mysql -u root -p mydb /opt/22.sql
Enter password:
-- 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);
Query OK, 1 row affected (0.01 sec)
mysql>
--插入了两条数据
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 4080 |
| mysql-bin.000002 | 702 |
+------------------+-----------+
2 rows in set (0.00 sec)
--02日志有变化了
mysql> drop database mydb;
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';
+------------------+------+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| mysql-bin.000002 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.23-log, Binlog ver: 4 |
| mysql-bin.000002 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000002 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000002 | 219 | Query | 1 | 298 | BEGIN |
| mysql-bin.000002 | 298 | Query | 1 | 397 | use `mydb`; insert into emm values(2) |
| mysql-bin.000002 | 397 | Xid | 1 | 428 | COMMIT /* xid=301 */ |
| mysql-bin.000002 | 428 | Anonymous_Gtid | 1 | 493 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000002 | 493 | Query | 1 | 572 | BEGIN |
| mysql-bin.000002 | 572 | Query | 1 | 671 | use `mydb`; insert into emm values(3) |
| mysql-bin.000002 | 671 | Xid | 1 | 702 | COMMIT /* xid=302 */ |
| mysql-bin.000002 | 702 | Anonymous_Gtid | 1 | 767 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000002 | 767 | Query | 1 | 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;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
数据库已经恢复完毕,只要弄清原理就很容易
6
数据库优化
一般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热备等
更多教程请参考