一、准备数据库环境1、搭建安装环境 yum -y install \ gcc \ gcc-c++ \ make \ ncurses \ ncurses-devel \ bison \ Cmake
2、添加数据库用户 tar xf mysql-boost-5.7.20.tar.gz –C /opt/ //解压源码包 cmake \ //检查安装配置环境 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=boost \ -DWITH_SYSTEMD=1 make && make install //编译安装 chown -R mysql.mysql /usr/local/mysql/ //将数据库安装目录的使用权限给用户mysql vi /etc/my.cnf //将主配置文件清空添加以下内容 [client] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES chown mysql:mysql /etc/my.cnf //更改主配置文件的权限 echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile echo 'export PATH' >> /etc/profile //添加系统环境变量 source /etc/profile //刷新立即生效 cd /usr/local/mysql/ //进入安装目录初始化数据库 bin/mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ //制作数据库系统启动命令 systemctl daemon-reload //刷新识别启动脚本 systemctl start mysqld //启动数据库 netstat -anpt | grep 3306 //查看端口是否在监听状态 二、直接备份
停止数据库,直接打包数据库数据目录/usr/local/mysql/data 三、完全备份
完全备份:每次对数据进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。 # mysqldump -u root -p --all-databases > all-data-$(date +%F).sql //备份所有数据库 # mysqldump -u root -p --databases auth mysql > auth-mysql.sql //备份多个数据库 # mysqldump -u root -p auth > auth-$(date +%F).sql //备份单个auth数据库 # mysqldump -u root -p mysql user > mysql-user-$(date +%F).sql //备份mysql的库中的user表
#mysqldump -u root -p -d mysql user > /tmp/desc-mysql-user.sql //备份mysql库user表的结构。 source /tmp/auth.sql //要先进入某个具体的数据库再进行恢复,除非是恢复所有数据库。 mysql -u root -p < all-data-$(date +%F).sql //恢复所有的数据库 mysql -u root -p mysql < mysql-user-$(date +%F).sql //恢复mysql的user表,需要指定库名 mysql -uroot -p auth < /tmp/desc-mysql-user.sql //将数据结构恢复到auth库中,单库备份的时候要指定还原到哪个数据库中,需要建立空库,库名可以任意 3、案列演示 create database client; //创建client库 use client; //进库 create table user_info(××× int(18),姓名 varchar(20),性别 varchar(20),用户ID号 int(20),资费 int(48)); //创建user_info表 desc user_info; //查看表结构
insert into user_info values('000000001','孙空武','男','011','100'); insert into user_info values('000000002','蓝凌','女','012','98'); insert into user_info values('000000003','姜纹','女','013','12'); insert into user_info values('000000004','关园','男','014','38'); insert into user_info values('000000005','罗中昆','男','015','39');
查看数据 drop database client; create database new_client;
还原client库 drop tables client.user_info; show tables in client;
desc new_client.user_info; select * from new_client.user_info;
四、增量备份
增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。 vi /etc/my.cfg 在[mysqld]下添加 log_bin=/usr/local/mysql/data/mysql_bin
create database client; use client; create table info(××× int(18),姓名 varchar(20),性别 varchar(20),用户ID号 int(20),资费 int(48)); insert into info values('000000001','孙空武','男','011','100'); insert into info values('000000002','蓝凌','女','012','98'); insert into info values('000000003','姜纹','女','013','12'); select * from info;
insert into info values('000000004','关园','男','014','38'); insert into info values('000000005','罗中昆','男','015','39');
delete from info where ×××=4; delete from info where ×××=5;
mysqlbinlog --no-defaults mysql_bin.000002 | mysql -u root -p //实为恢复保存在mysql_bin.000002中的插入操作 进入数据库验证是否恢复成功 select * from client.info;
insert into info values('000000006','蓝凌林','女','012','98'); insert into info values('000000007','姜纹文','女','013','12');
错误操作: insert into info values('000000008','凌林','女','012','98'); insert into info values('000000009','纹文','女','013','12');
断点恢复(为了避开错误的操作)
进行最近一次全量备份还原 mysqlbinlog --no-defaults --start-position='293' --stop-position='732' mysql_bin.000004 | mysql -uroot -p //断点恢复第一处 mysqlbinlog --no-defaults --start-position='1160' --stop-position='1593' mysql_bin.000004 | mysql -uroot -p //断点恢复第二处
验证端点恢复是否成功 附:关于位置变量的筛选方法和时间变量的筛选方法
基于位置:at |