mysql二进制安装和数据备份

版权声明:勇哥出品必属精品违者必究,相信勇哥幸福一生,不信勇哥抱憾终身,盗版一时爽全家火葬场! https://blog.csdn.net/weixin_42837637/article/details/82844306

一、mysql备份方案

数据库备份方案:

  1. 全量备份
  2. 增量备份
  3. 差异备份
备份方案 特点
全量备份 全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。数据恢复快。备份时间长
增量备份 增量备份是指在一次全备份或上一次增量备份后,每次以后的备份只需备份与前一次相比增加者状语从句:被修改的文件。这就意味着,第一次增量备份的对象的英文进行全备后所产生的增加修改状语从句:文件的;第二次增量备份的对象是进行第一次增量。备份后所产生的增加和修改的文件,类推如此没有重复的备份数据备份短时间恢复数据时必须按一定的顺序进行
差异备份 备份上一次的完全备份后发生变化的所有文件。差异备份的英文指在一次全备份后到进行差异备份的这段时间内对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全量备份和最后一次差异备份进行恢复。

1.mysql备份工具mysqldump

//语法:
mysqldump [OPTIONS] database [tables …]
mysqldump [OPTIONS] --all-databases [OPTIONS]
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3…]
//常用的OPTIONS:
-uUSERNAME //指定数据库用户名
-hHOST //指定服务器主机,请使用ip地址
-pPASSWORD //指定数据库用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307

二、mysql二进制的安装

1.创建用户和用户组

[root@localhost ~]# groupadd -r mysql
[root@localhost ~]# useradd -M -s /sbin/nologin -g mysql mysql
[root@localhost ~]# tar xf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ln -sv mysql-5.7.23-linux-glibc2.12-x86_64/ mysql

2.修改目录属组属主

[root@localhost local]# chown -R mysql.mysql /usr/local/mysql

3.添加环境变量

[root@localhost ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH'>/etc/profile.d/mysql.sh
[root@localhost ~]# . /etc/profile.d/mysql.sh
[root@localhost ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

4.建立数据库存放目录

[root@localhost ~]# mkdir /opt/data
[root@localhost ~]# chown -R mysql.mysql /opt/data/
[root@localhost ~]#/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/

5.生成配置文件

[root@localhost ~]# cat > /etc/my.cnf <<EOF
> [mysqld]
> basedir = /usr/local/mysql
> datadir = /opt/data
> socket = /tmp/mysql.sock
> port = 3306
> pid-file = /opt/data/mysql.pid
> user = mysql
> skip-name-resolve
> EOF
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve

6.配置启动服务脚本

[root@localhost ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /etc/init.d/mysqld
[root@localhost ~]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /etc/init.d/mysqld

7.启动mysql服务

[root@localhost ~]# /etc/init.d/mysqld start
[root@localhost ~]# ps -ef|grep mysql

8.使用临时密码修改为新密码

[root@localhost ~]# mysql -uroot -p
Enter password: 
mysql> set password = password('qinyong123!') ;
Query OK, 0 rows affected, 1 warning (0.00 sec)

9.创建仓库和表

mysql> create database qinyong;
Query OK, 1 row affected (0.01 sec)
mysql> use qinyong;
Database changed
mysql> create table student(id int(11)NOT NULL,name char(100)NOT NULL,age tinyint NULL);
Query OK, 0 rows affected (0.02 sec)
mysql> create database qin;
Query OK, 1 row affected (0.00 sec)
mysql> use qin;
Database changed
mysql> create table student(id int(11)NOT NULL,name char(100)NOT NULL,age tinyint NULL);
Query OK, 0 rows affected (0.06 sec)

10.查看数据库和表然后备份

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qin                |
| qinyong            |
| sys                |
+--------------------+
6 rows in set (0.05 sec)
mysql> use qinyong
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_qinyong |
+-------------------+
| student           |
+-------------------+
1 row in set (0.00 sec)

11.备份数据库和表

[root@localhost ~]# mysqldump -uroot -p qinyong student >student-table-20180926.sql
Enter password: 
[root@localhost ~]# ls
all-0925.sql  anaconda-ks.cfg  mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz  student-table-20180926.sql
[root@localhost ~]# mysqldump -uroot -p --databases qinyong>qinyong-database-20180926.sql
Enter password: 
[root@localhost ~]# ls
all-0925.sql  anaconda-ks.cfg  mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz  qinyong-database-20180926.sql  student-table-20180926.sql

12.删除表然后还原表

mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
[root@localhost ~]# mysql -uroot -p qinyong < student-table-20180926.sql
Enter password: 
[root@localhost ~]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qin                |
| qinyong            |
| sys                |
+--------------------+
6 rows in set (0.00 sec)
mysql> use qinyong;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-------------------+
| Tables_in_qinyong |
+-------------------+
| student           |
+-------------------+
1 row in set (0.00 sec)

13.删除库然后还原库

mysql> drop database qinyong;
Query OK, 1 row affected (0.06 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qin                |
| sys                |
+--------------------+
5 rows in set (0.01 sec)
[root@localhost ~]# mysql -uroot -p  < qinyong-database-20180926.sql
Enter password: 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qin                |
| qinyong            |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

三、差异备份

1.开启mysql服务器的二进制日志功能

[root@localhost ~]#vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
server-id=1          //设置服务器标识符
log-bin=mysql_bin   //开启二进制日志功能

2.查看数据库的内容

[root@localhost ~]#service mysqld restart
mysql> show tables from qinyong;      \\有两张表
+-------------------+
| Tables_in_qinyong |
+-------------------+
| runtime           |
| student           |
+-------------------+
2 rows in set (0.00 sec)
mysql> show tables;
+-------------------+
| Tables_in_qinyong |
+-------------------+
| student           |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from student;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
11 rows in set (0.00 sec)


[root@localhost ~]# ll /opt/data/|grep mysql_bin
-rw-r-----. 1 mysql mysql     1246 2月  22 16:13 mysql_bin.000001
-rw-r-----. 1 mysql mysql       19 2月  22 16:13 mysql_bin.index
3.数据库进行完全备份

[root@localhost ~]# mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > all-201902230940.sql
[root@localhost ~]#  ll /opt/data/|grep mysql_bin
-rw-r-----. 1 mysql mysql      154 2月  23 09:40 mysql_bin.000004
-rw-r-----. 1 mysql mysql       19 2月  23 09:41 mysql_bin.index

4.两次修改以后

mysql> select * from qinyong.student;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
11 rows in set (0.00 sec)

mysql> select * from qinyong.student;     //第一次修改
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
| 12 | xiaoming    |    6 |
| 13 | xiaohong    |    7 |
+----+-------------+------+
13 rows in set (0.00 sec)
mysql>  insert into student values(12,'xiaoming',6),(13,'xiaohong',7);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> update student set age = 10 where name = 'lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from qinyong.student;            //第二次修改以后
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        |   10 |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
| 12 | xiaoming    |    6 |
| 13 | xiaohong    |    7 |
+----+-------------+------+
13 rows in set (0.00 sec)

5.模拟误删数据

[root@localhost ~]# mysql -uroot -p -e 'drop database qinyong;'
[root@localhost ~]# mysql -uroot -p -e 'show databases;'
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| zabbix             |
+--------------------+
[root@localhost ~]# mysqladmin -uroot -p flush-logs
[root@localhost ~]# ll /opt/data/|grep mysql_bin
-rw-r-----. 1 mysql mysql      945 2月  23 10:02 mysql_bin.000004
-rw-r-----. 1 mysql mysql      154 2月  23 10:02 mysql_bin.000005
-rw-r-----. 1 mysql mysql       38 2月  23 10:02 mysql_bin.index

6.恢复误删的数据

[root@localhost ~]# mysql -uroot -p <all-201902230940.sql
Enter password: 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qinyong            |
| sys                |
| zabbix             |
+--------------------+
6 rows in set (0.00 sec)
mysql> show tables from qinyong;
+-------------------+
| Tables_in_qinyong |
+-------------------+
| student           |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from qinyong.student;    //恢复到最初的列表
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        | NULL |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
11 rows in set (0.00 sec)

7.查找到误删数据库记录的位置

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000005 |  3179163 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> show binlog events in 'mysql_bin.000004'\G
*************************** 1. row ***************************
   Log_name: mysql_bin.000004
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 123
       Info: Server ver: 5.7.23-log, Binlog ver: 4
*************************** 2. row ***************************
   Log_name: mysql_bin.000004
        Pos: 123
 Event_type: Previous_gtids
  Server_id: 1
End_log_pos: 154
       Info: 
*************************** 3. row ***************************
   Log_name: mysql_bin.000004
        Pos: 154
 Event_type: Anonymous_Gtid
  Server_id: 1
End_log_pos: 219
       Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************
   Log_name: mysql_bin.000004
        Pos: 219
 Event_type: Query
  Server_id: 1
End_log_pos: 294
       Info: BEGIN
*************************** 5. row ***************************
   Log_name: mysql_bin.000004
        Pos: 294
 Event_type: Table_map
  Server_id: 1
End_log_pos: 351
       Info: table_id: 141 (qinyong.student)
*************************** 6. row ***************************
   Log_name: mysql_bin.000004
        Pos: 351
 Event_type: Write_rows
  Server_id: 1
End_log_pos: 416
       Info: table_id: 141 flags: STMT_END_F
*************************** 7. row ***************************
   Log_name: mysql_bin.000004
        Pos: 416
 Event_type: Xid
  Server_id: 1
End_log_pos: 447
       Info: COMMIT /* xid=2449 */
*************************** 8. row ***************************
   Log_name: mysql_bin.000004
        Pos: 447
 Event_type: Anonymous_Gtid
  Server_id: 1
End_log_pos: 512
       Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 9. row ***************************
   Log_name: mysql_bin.000004
        Pos: 512
 Event_type: Query
  Server_id: 1
End_log_pos: 587
       Info: BEGIN
*************************** 10. row ***************************
   Log_name: mysql_bin.000004
        Pos: 587
 Event_type: Table_map
  Server_id: 1
End_log_pos: 644
       Info: table_id: 141 (qinyong.student)
*************************** 11. row ***************************
   Log_name: mysql_bin.000004
        Pos: 644
 Event_type: Update_rows
  Server_id: 1
End_log_pos: 701
       Info: table_id: 141 flags: STMT_END_F
*************************** 12. row ***************************
   Log_name: mysql_bin.000004
        Pos: 701
 Event_type: Xid
  Server_id: 1
End_log_pos: 732
       Info: COMMIT /* xid=2453 */
*************************** 13. row ***************************
   Log_name: mysql_bin.000004
        Pos: 732
 Event_type: Anonymous_Gtid
  Server_id: 1
End_log_pos: 797
       Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 14. row ***************************    删除数据关键节点
   Log_name: mysql_bin.000004
        Pos: 797
 Event_type: Query
  Server_id: 1
End_log_pos: 898
       Info: drop database qinyong
*************************** 15. row ***************************
   Log_name: mysql_bin.000004
        Pos: 898
 Event_type: Rotate
  Server_id: 1
End_log_pos: 945
       Info: mysql_bin.000005;pos=4
15 rows in set (0.00 sec)

8.找到关键恢复点,恢复到此删除数据前

[root@localhost ~]# mysqlbinlog --stop-position=797 /opt/data/mysql_bin.000004 |mysql -uroot -p
Enter password:

9.验证数据是否恢复

mysql> select * from qinyong.student;            //验证成功
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  6 | zhangshan   |   20 |
|  7 | lisi        |   10 |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |    3 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
| 12 | xiaoming    |    6 |
| 13 | xiaohong    |    7 |
+----+-------------+------+

猜你喜欢

转载自blog.csdn.net/weixin_42837637/article/details/82844306