Mysql数据库安装&备份恢复详细教程(Centos7中安装Mysql、mysqldump全量备份、binlog增量备份、数据恢复、开启定时任务备份数据库)

您所在的位置:网站首页 安装mysql的语句 Mysql数据库安装&备份恢复详细教程(Centos7中安装Mysql、mysqldump全量备份、binlog增量备份、数据恢复、开启定时任务备份数据库)

Mysql数据库安装&备份恢复详细教程(Centos7中安装Mysql、mysqldump全量备份、binlog增量备份、数据恢复、开启定时任务备份数据库)

2024-04-06 03:05| 来源: 网络整理| 查看: 265

Mysql数据库安装&备份恢复详细教程

Author xiuhongChen Date 2020/9/23 Desc Centos7中安装Mysql、mysqldump全量备份、binlog增量备份、数据恢复、开启定时任务备份数据库等

文章目录 Mysql数据库安装&备份恢复详细教程一、Centos7中安装Mysql1、配置YUM源2、安装MySQL3、配置并启动MySQL服务4、修改root默认密码5、设置mysql使其可以被远程访问6、远程用test用户登陆 二、mysqldump全量备份、恢复1.常用参数2.Mysqldump备份常见用法3.sql文件还原方法 三、binlog增量备份、恢复1.开启binlog2.查看binlog日志文件3.查看binlog日志内容4.日志生成场景5.恢复Binlog 四、binlog_format模式与配置详解1.STATEMENT模式(SBR)2.ROW模式(RBR)3.MIXED模式(MBR)4.binlog配置 五、Linux下crontab定时执行任务1.cron服务启动2./etc/crontab -- root用户3.crontab文件权限4.crontab语法5.crontab使用

一、Centos7中安装Mysql

注意:虚拟机版本不同,mysql源不一样。 在这里插入图片描述 版本centos7安装步骤:

1、配置YUM源

在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/

#下载mysql源安装包 shell> wget --no-check-certificate http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

#安装mysql源 shell> yum localinstall mysql57-community-release-el7-8.noarch.rpm

#检查mysql源是否安装成功 shell> yum repolist enabled | grep “mysql.-community.”

#如果存在多个数据源,启用或者禁用最新mysql数据源,此处使用Mysql5.7 yum-config-manager --disable mysql55-community yum-config-manager --disable mysql56-community yum-config-manager --enable mysql57-community-dmr

yum repolist enabled | grep mysql 在这里插入图片描述

虚拟机版本Centos6.5安装步骤: https://www.cnblogs.com/lzj0218/p/5724446.html https://www.cnblogs.com/hyl8218/p/5648064.html 1.配置YUM源 #下载mysql源安装包 wget --no-check-certificate dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm #安装mysql源 yum install mysql-community-release-el6-5.noarch.rpm #查看安装好的Mysql依赖 yum repolist all | grep mysql 2、安装MySQL

shell> yum install mysql-community-server

3、配置并启动MySQL服务

shell> vim /etc/my.conf

#Linux上Mysql表名区分大小写,所以需要设置表名不区分大小写,同时设置字符集 [mysqld] lower_case_table_names = 1 character_set_server=utf8

shell> systemctl start mysqld.service #启动Mysql shell> systemctl restart mysqld.service #重启Mysql shell> systemctl stop mysqld.service #关闭Mysql shell> systemctl status mysqld.service #查看Mysql服务状态 备注:centos6.5中启动mysql命令和centos7不一致,service mysqld start

看到下图说明启动成功: 在这里插入图片描述

4、修改root默认密码

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。 有三种方式找到root默认密码:

方法一、找回初始密码(推荐) grep "password" /var/log/mysqld.log SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

方法二、使用操作系统账号和密码,进行修改密码 1、mysql -uroot -p 2、输入你的centos的密码 3、UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword') WHERE User = ‘root’ AND Host = ‘localhost’; 注:如果显示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,说明你的密码不符合安全要求, 4、FLUSH PRIVILEGES; 5、quit;

方法三、强制进行修改密码(本例使用)

[root@VM_0_3_centos local]# systemctl stop mysqld.service [root@VM_0_3_centos local]# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" [root@VM_0_3_centos local]# systemctl start mysqld.service [root@VM_0_3_centos local]# systemctl status mysqld.service [root@VM_0_3_centos local]# mysql -u root -p mysql> UPDATE mysql.user SET authentication_string = PASSWORD(‘123456’) WHERE User = ‘root’ AND Host = ‘localhost’; mysql> FLUSH PRIVILEGES; mysql> quit;

在这里插入图片描述

5、设置mysql使其可以被远程访问 [root@VM_0_3_centos local]# mysql -u root -p mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> alter user 'root'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.00 sec) #设置test账号被远程访问 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql>

#允许root用户远程可以访问 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

6、远程用test用户登陆

备注:若在腾讯云服务器上安装Mysql,记得在安全组开放3306端口 使用navicate可以登陆成功。

二、mysqldump全量备份、恢复

Mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。

1.常用参数

-u: 指定用户 -p: 指定密码 -single-transaction: 确保事务性操作,只对 innodb 有效,保证备份期间没有 DDL 操作 -l (–lock-table): 对于非 Innodb 引擎的备份进行锁表,只能进行读操作。与 single-transaction 互斥 -x,–lock-all-table: 给实例下的所有数据库的表进行加锁,保证一致性,该参数会导致在备份过程中数据库只读,不可写 -d: 只备份表结构,不备份数据 -master-data: 有两个值: 1 和 2。1 时只记录change master 语句,为 2 时change master 会注释掉,建议设置为 2 -all-database,-A: 备份 MySQL 实例下的所有数据库 -database: 指定对应的数据库进行备份 -R, -routines: 备份所有的存储过程 -tiggers: 备份触发器 -E, –events: 备份数据库中的调度时间 -hex-blob: 将对 blog/binary 等格式的数据转为 16 进制形式进行保存 -tab=path: 在指定路径下分别生成结构文件和数据文件,会对每个表分别生成一个记录表结构的 sql 文件和记录数据的 txt 文件 -w,-where= 过滤条件,对于单表进行过滤条件的备份

2.Mysqldump备份常见用法

1)导出整个数据库(包括数据库中的数据) mysqldump -uusername -p dbname > dbname.sql

2)导出数据库结构(不含数据) mysqldump -uusername -p -d dbname > dbname.sql

3)导出数据库中的某张数据表(包含数据) mysqldump -uusername -p dbname tablename > tablename.sql mysqldump -uroot -p -B dbname --tables tablename > tablename.sql

4)导出数据库中的某张数据表的表结构(不含数据) mysqldump -uusername -p -d dbname tablename > tablename.sql

5)备份数据库时使用参数(–ignore-table)排除某个表或多个表 mysqldump -uroot -p --ignore-table=dbname.table1 --ignore-table=dbname.table2 dbname > backup.sql

mysqldump -utest -p hap_dev_backup > hap_dev_backup1713.sql mysqldump -utest -p -d hap_dev_backup > hap_dev_backup_d.sql mysqldump -utest -p hap_dev_backup hap_demo> hap_dev_backup_table.sql mysqldump -utest -p -B hap_dev_backup --tables hap_demo> hap_dev_backup_table2.sql mysqldump -utest -p -B hap_dev_backup --tables sys_config> hap_dev_backup_table3.sql mysqldump -utest -p --ignore-table=hap_dev_backup.hap_demo hap_dev_backup > hap_dev_backup_ignore.sql 问题: 在使用mysqldump导出mysql数据库数据时,出现了如下错误:mysqldump: Got error: 1045: Access denied for user ‘root’@‘localhost’ (using password: YES) when trying to connect 注意:-u用户名 中间没有空格mysqldump -uhbis_dev -p hbis_dev > hbis_dev.sql 在这里插入图片描述 3.sql文件还原方法

1)Shell命令 mysql -uusername -p dbname < backup.sql mysql -uusername -p -f dbname < backup.sql #-f 表示忽略出现的SQL错误 nohup mysql -uroot -p -f dbname < backup.sql > /dev/null 2>&1 & #在导入较大的sql文件时可以放到后台执行 mysql -utest -p hap_dev_backup < hap_dev_backup_ignore.sql

2)Mysql命令–source mysql -uroot -p #登录到数据库 use dbname; #切换到需要导入的库中 source /usr/local/software/mysql_backup/sys1.sql #执行SQL文件

注意:只能在cmd界面下执行source命令,不能在navicate等mysql工具里面执行source命令,会报错,因为cmd是直接调用mysql.exe来执行命令的。

三、binlog增量备份、恢复

binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据。我们可以通过binlog日志恢复数据。下面就介绍一下开启MySQL binlog日志的过程:

1.开启binlog

1)登录MySQL,查看binlog日志的状态 mysql> show variables like ‘%log_bin%’;

2)开启binlog 若为OFF,则修改配置文件开启binlog日志: shell> vim /etc/my.cnf log-bin=/var/lib/mysql/mysql-bin server-id=123454

3)重启Mysql服务器,并查看日志状态 shell> systemctl restart mysqld.service #服务器命令行执行 mysql> show variables like ‘%log_bin%’ #登陆Mysql查看 在这里插入图片描述

2.查看binlog日志文件

登陆到Mysql或者利用navicate等数据库工具。 1)查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值 mysql> show master status; 在这里插入图片描述

2)查看所有binlog日志列表 mysql> show master logs; 在这里插入图片描述 3)将内存中log日志写磁盘,保存在当前binlog文件中,并产生一个新的binlog日志文件 mysql> flush logs; 注:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

4)删除所有二进制日志,并重新(mysql-bin.000001)开始记录 mysql> reset master;

3.查看binlog日志内容

1)登陆到Mysql查看日志内容 只查看第一个binlog文件的内容 mysql> show binlog events;

查看指定binlog文件的内容 mysql> show binlog events in ‘mysql-bin.000001’; 如下:图一显示”binlog_format=ROW”时更新行的日志情况,并没记录详细SQL语句 图二显示“binlog_format=MIXED”时插入数据日志,显示详细的SQL,便于阅读(关于binlog_format模式可参考第四部分) 在这里插入图片描述 查询binlog文件前10条纪录 show binlog events in ‘mysql-bin.000018’ limit 10

从pos点:2开始查起,查询10条 show binlog events in ‘mysql-bin.000018’ from 2 limit 10;

从pos点:2开始查起,偏移2行,查询10条 show binlog events in ‘mysql-bin.000018’ from 2 limit 2,10;

2)用Mysqlbinlog工具查看 基于开始/结束时间 shell> mysqlbinlog --start-datetime=‘2019-01-16 8:30:00’ --stop-datetime=‘2019-01-16 08:33:00’ /var/lib/mysql/mysql-bin.000018 在这里插入图片描述

# at 11584 #190116 8:31:39 server id 123454 end_log_pos 11816 CRC32 0x5eba4921 Query thread_id=59 exec_time=0 error_code=0 use `hap_dev_backup`/*!*/; SET TIMESTAMP=1547598699/*!*/; INSERT INTO `hap_ar_customers` VALUES (201, 'C001', '上海达芙妮', 101, 'Y', '2016-08-24 16:48:17', -1, -1, '2016-08-24 16:48:17', -1) /*!*/;

Position:位于文件中的位置,即第一行的(#at 11584),说明该事件记录从文件第11584字节开始 Timestamp:事件发生的时间戳,即第二行的(#190116 8:31:39) Server id:服务器标识 Thread id:代理线程id Exec_time:事件的执行花费时间 Error_code:错误码 Type: 事件类型,此处为Query

4.日志生成场景

1)当停止或重启服务器时,服务器会把日志文件记入下一个日志文件,Mysql会在重启时生成一个新的日志文件,文件序号递增; 2)如果日志文件超过max_binlog_size(默认值1G)系统变量配置的上限时,也会生成新的日志文件(在这里需要注意的是,如果你正使用大的事务,二进制日志还会超过max_binlog_size,不会生成新的日志文件,事务全写入一个二进制日志中,这种情况主要是为了保证事务的完整性) 3)日志被刷新时,新生成一个日志文件。flush logs;

5.恢复Binlog

当前时间为17:40,我们执行“flush logs;”刷新日志,然后执行下列操作,将日志记录到文件“mysql-bin.000019”中。

1)创建表 17.41

CREATE TABLE `hap_ar_customers` ( `CUSTOMER_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '客户ID', `CUSTOMER_NUMBER` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '客户编号', `CUSTOMER_NAME` varchar(240) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '客户名称', `COMPANY_ID` bigint(20) NOT NULL COMMENT '公司ID', `ENABLED_FLAG` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'Y' COMMENT '启用标识', `CREATION_DATE` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP, `CREATED_BY` bigint(20) NULL DEFAULT -1, `LAST_UPDATED_BY` bigint(20) NULL DEFAULT -1, `LAST_UPDATE_DATE` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP, `LAST_UPDATE_LOGIN` bigint(20) NULL DEFAULT -1, PRIMARY KEY (`CUSTOMER_ID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 206 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '客户主数据' ROW_FORMAT = Compact;

2)插入数据 INSERT INTO hap_ar_customers VALUES (201, ‘C001’, ‘上海达芙妮’, 101, ‘Y’, ‘2016-08-24 16:48:17’, -1, -1, ‘2016-08-24 16:48:17’, -1);

3)查询 select * from hap_ar_customers 在这里插入图片描述 4)删除数据 时间:17:42 delete from hap_ar_customers where CUSTOMER_ID = 201; 在这里插入图片描述 5)mysql-bin.000019中记录了刚才的所有操作,所以从该binlog中恢复数据

通过事件位置来恢复: 我们可以通过参数–start-position 和 --stop-position指定恢复binlog日志的起止位置点,通过位置的恢复需要我们有更加精细的操作,例如在某个时间点我们执行了错误的语句,且这个时间点前后都有大并发操作,要确定破坏性sql的时间点,我们可以先导出大致的时间段的日志到文件以缩小查找范围,再去分析和确定 。 此案例中,我们首先查看mysql-bin.000019文件,定位删除语句所在position为1831 在这里插入图片描述 确定好需要恢复的位置之后(1240–1667),我们就可以进行恢复了 ,执行恢复命令如下: mysqlbinlog --start-position=1240 --stop-position=1667 /var/lib/mysql/mysql-bin.000019 | mysql -utest -p hap_dev_backup 在这里插入图片描述 再次查询表数据,数据恢复成功! 在这里插入图片描述通过事件的时间来恢复 我们可以通过参数–start-datetime 和 --stop-datetime指定恢复binlog日志的起止时间点,时间使用DATETIME格式。 如下图,插入数据的起止时间点是17:41:39–17:42:20 shell> mysqlbinlog --start-datetime="2019-01-16 17:41:39" --stop-datetime="2019-01-16 17:42:20" /var/lib/mysql/mysql-bin.000019 | mysql -utest -p hap_dev_backup 在这里插入图片描述

备注: 对于多个日志文件需要恢复的时候不要单个单个执行: [root@localhost /]# mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!! [root@localhost /]# mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!! 上述操作就十分危险,如果第一个日志包含创建临时表语句CREATE TEMPORARY TABLE,第二个日志要使用该临时表,第一个导入binlog日志的进程退出后临时表会被删除,执行第二个日志文件要使用临时表时会因找不到而报 “unknown table.”

总结:所谓恢复,就是让mysql将保存在binlog日志中指定段落区间的sql语句逐个重新执行一次而已。

四、binlog_format模式与配置详解

Mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED。

1.STATEMENT模式(SBR)

每一条会修改数据的sql语句会记录到binlog中。 优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。 缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

2.ROW模式(RBR)

不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。 缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

3.MIXED模式(MBR)

以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

4.binlog配置

在mysql的配置文件my.cnf中,可以通过一下选项配置binglog相关

binlog_format= MIXED #binlog日志格式,默认为statement,建议使用mixed log-bin= /data/mysql/mysql-bin.log #binlog日志文件 expire_logs_days = 7 #binlog过期清理时间 max_binlog_size = 100m #binlog每个日志文件大小 binlog_cache_size = 4m #binlog缓存大小 max_binlog_cache_size= 512m #最大binlog缓存大小 五、Linux下crontab定时执行任务

在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。 cron的配置文件称为“crontab”,是“cron table”的简写。

1.cron服务启动

cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。 service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 service crond status //查看服务状态

2./etc/crontab – root用户

root用户制定的任务的crontab,目前只有root用户可以使用,这种方法更加方便直接给其他用户设置计划任务,而且还可以指定执行shell等(关于该文件的权限问题详见第4小节)

SHELL:变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 /bin/bash)PATH:变量定义用来执行命令的路径MAILTO:变量是cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出01 * * * * root run-parts /etc/cron.hourly`:表示每小时的第01分钟去执行/etc/cron.hourly目录下的shell脚本 在这里插入图片描述 3.crontab文件权限

crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在

如果两个文件都不存在,则只有root用户才能使用crontab命令如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令 4.crontab语法

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute hour day month week command 顺序:分 时 日 月 周 在这里插入图片描述

crontab –e //修改 crontab 文件,如果文件不存在会自动创建(所有用户可使用)crontab –l //显示 crontab 文件。crontab -r //删除 crontab 文件。crontab -ir //删除 crontab 文件前提醒用户。 5.crontab使用

编辑一个shell脚本,打印当前时间到txt文件中:echo $(date +%F%n%T) >> test1.txt 执行crontab -e 修改文件增加定时任务: 1)每小时的22分钟执行脚本:22 * * * * /root/test1.sh 2)每个工作日(Mon – Fri) 11:59 执行: 59 11 * * 1,2,3,4,5 /root/test1.sh 59 11 * * 1-5 /root/test1.sh 3)每两分钟执行一次命令:*/2 * * * * /root/test1.sh

服务器上全量&增量备份脚本还在老电脑上,待我找到后po出来。

希望可以帮助到正在管理数据库的小伙伴!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3