Ⅰ linux中mysql如何备份与恢复
mysql备份还是有很多学问的,最权威的回答在mysql的中文手册:
mysql手册:http://doc.linuxpk.com/doc/mysql/
废话少说了,简单的讲,如果你的数据库半夜可以停1~5分钟,那么推荐直接备份整个数据库文件,这样,恢复方便,很快的,我在机房工作的,已经搞过很多次了。可以写个脚本放在自动任务里,比如我在linux上的mysql备份脚本:
#!/bin/bash
#History
#=====================================================
#When Who What
#2010/5/12 Zhaoyn Create
#
#=====================================================
basedir=/opt/backup
rm -f `find $basedir -name "mysql*.tgz" -mtime +22`
/etc/rc.d/init.d/mysqld stop
sleep 5s ;sync;sync
tar -czpf $basedir/mysql.$(date +%Y%m%d-%H%M).tgz /etc/my.cnf /var/lib/mysql
/etc/rc.d/init.d/mysqld start
如果你想临时备份,又不能停数据库,那就用mysqlmp了,其参数很多,但一般可以使用默认参数。
使用常用参数:
备份整个数据库,使用默认选项,指定字符集:
mysqlmp --opt --default-character-set=gbk dbname > dbname-mysqlbackup.20100927.sql
在新建的服务器上恢复整个数据库:
创建数据库,然后使用mysql客户端恢复:
shell> mysqladmin create target_db_name
shell> mysql target_db_name < backup-file.sql
即 shell> mysql 库名 < 文件名
至于备份一个软件,直接打包就是了,跟mysql分开备份。
Ⅱ LINUX下如何直接对MYSQL数据库进行备份
MYSQL提供了数据导入与导出的两个命令,分别是mysqlimport(导入)和
mysqlmp(导出或者转储)。详细用法请网络一下。
Ⅲ linux mysql备份和恢复
备份所有数据库# mysqlmp -u root -p --opt --all-databases > /root/all-databases
修复# myisamchk -r /var/lib/mysql/allusers/names.MYI
或# myisamchk -o /var/lib/mysql/allusers/names.MYI
Ⅳ linux下mysql数据库备份工具有哪些
命令行 mysqlmp
网页phpmyadmin
Ⅳ 我把linux下的mysql文件夹拷贝了下来,想在另一台linux下的mysql上恢复数据,多个数据库文件,出现1146错误
项目上 MySQL还原 SQL 备份经常会碰到一个错误如下,且通常出现在导入视图、函数、存储过程、事件等对象时,其根本原因就是因为导入时所用账号并不具有SUPER 权限,所以无法创建其他账号的所属对象。ERROR 1227 (42000) : Access denied; you need (at least one of) the SUPER privilege(s) for this operation常见场景:1. 还原 RDS 时经常出现,因为 RDS 不提供 SUPER 权限;2. 由开发库还原到项目现场,账号权限等有所不同。
处理方式:
1. 在原库中批量修改对象所有者为导入账号或修改SQL SECURITY为Invoker;2. 使用 mysqlmp 导出备份,然后将 SQL 文件中的对象所有者替换为导入账号。
二、问题原因我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制,像视图、函数、存储过程、触发器等这些数据对象会存在一个DEFINER和一个SQL SECURITY的属性,如下所示:
--视图定义CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`%`SQLSECURITYDEFINERVIEWv_test
--函数定义CREATEDEFINER=`root`@`%`FUNCTION`f_test()`RETURNSvarchar(100)SQLSECURITYDEFINER
--存储过程定义CREATEDEFINER=`root`@`%`PROCEDURE`p_test`()SQLSECURITYDEFINER
--触发器定义CREATE DEFINER=`root`@`%` trigger t_test
--事件定义CREATE DEFINER=`root`@`%` EVENT `e_test`
DEFINER:对象定义者,在创建对象时可以手动指定用户,不指定的话默认为当前连接用户;
SQL SECURITY:指明以谁的权限来执行该对象,有两个选项,一个为DEFINER,一个为INVOKER,默认情况下系统指定为 DEFINER;DEFINER:表示按定义者的权限来执行;INVOKER:表示按调用者的权限来执行。
如果导入账号具有 SUPER 权限,即使对象的所有者账号不存在,也可以导入成功,但是在查询对象时,如果对象的SQL SECURITY为DEFINER,则会报账号不存在的报错。ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
改写好处:1. 可以避免还原时遇到 DEFINER 报错相关问题;2. 根据输出信息知道备份是否正常进行,防止备份中遇到元数据锁无法获取然后一直卡住的情况。
Ⅵ Linux查看数据库备份脚步的配置信息命令
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
mysql
登录
Linux 关于MYSQL数据库命令(查看,备份等操作) 原创
2016-04-19 11:22:33
fuwen1989
码龄7年
关注
1.Linux系统下启动MySQL的命令:
/ect/init.d/mysql start (前面为mysql的安装路径)
2.linux下重启mysql的命令:
/ect/init.d/mysql restart (前面为mysql的安装路径)
3.linux下关闭mysql的命令:
/ect/init.d/mysql shutdown (前面为mysql的安装路径)
4.连接本机上的mysql:
进入目录mysql\bin,再键入命令mysql -u root -p, 回车后提示输入密码。
5.打开数据库后的操作命令查看数据库的命令
mysql> show databases;
打开mydb库
mysql> use mydb;
查看数据表的详细结构
mysql> desc funtb;
新建数据库
mysql> create database school;新建表
mysql> create table user01(
-> id varchar(20) NOT NULL,
-> userName varchar(10) NOT NULL,
-> age int(11) default'0',
-> sex char(2) NOT NULL default'm',
-> PRIMARY KEY (id)
-> )TYPE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql>desc student;
插入
mysql> insert into student(id,stuName) values('1','tomcat');
删除
mysql> delete from student where id='1';
删除表中所有数据
mysql> truncate table student;
删除表
mysql> drop table temp;
创建新用户并给予权限
mysql> grant all privileges on *.* to dbuser@localhost identified by '1234'
with grant option;
更改Mysql用户密码
c:\Mysql5.0\bin>mysqladmin -u root -p password 1234
Enter password: ****
备份数据库及表(新版数据库不加3306端口号)
c:\mysql\bin\>mysqlmp –u root –p mydb >d:\backup.sql
执行此语句将把数据库mydb 备份到D盘的backup.sql文件中 备份多个数据库表
c:\mysql\bin\>mysqlmp –u root –p 3306 school user01 user >d:\backup.sql
此句的意思是把school库中的user01表和user表的内容和表的定义备份到D盘backup.sql文件中。
备份所有的数据库
c:\myql\bin>mysqlmp –u root –p 3306 –all –database>d:backup.sql
还原Mysql数据库
c:\mysql\bin\mysql –u root –p 3306 school
还原其中的一个表
mysql> source d:\books.sql;
退出Mysql连接
mysql>quit(exit)
windows关闭mysql服务
C:\mysql\bin>net mysql
Ⅶ linux下mysql备份文件怎样还原到windows下
在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。 而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。 当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。 而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。
Ⅷ 如何将linux中mysql备份恢复
一般是即时备份。做主从。或者是每天增量备份。
本文是在linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本.
本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份策略或者需要修改相关参数.
每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬照抄,可能会造成不必要的损失.
希望你明白这个脚本要干什么工作!
脚本描述
每7天备份一次所有数据,每天备份binlog,也就是增量备份.
(如果数据少,每天备份一次完整数据即可,可能没必要做增量备份)
作者对shell脚本不太熟悉,所以很多地方写的很笨 :)
开启 bin log
在mysql 4.1版本中,默认只有错误日志,没有其他日志.可以通过修改配置打开bin log.方法很多,其中一个是在/etc/my.cnf中的mysqld部分加入:
[mysqld]
log-bin
这个日志的主要作用是增量备份或者复制(可能还有其他用途).
如果想增量备份,必须打开这个日志.
对于数据库操作频繁的mysql,这个日志会变得很大,而且可能会有多个.
在数据库中flush-logs,或者使用mysqladmin,mysqlmp调用flush-logs后并且使用参数delete-master-logs,这些日志文件会消失,并产生新的日志文件(开始是空的).
所以如果从来不备份,开启日志可能没有必要.
完整备份的同时可以调用flush-logs,增量备份之前flush-logs,以便备份最新的数据.
完整备份脚本
如果数据库数据比较多,我们一般是几天或者一周备份一次数据,以免影响应用运行,如果数据量比较小,那么一天备份一次也无所谓了.
#!/bin/sh
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqlmp --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo " it to your local disk or ftp to somewhere !!!"
ls -al $BakDir
上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放在/backup/mysql/daily目录下.
注意:上面的脚本并没有把备份后的文件传送到其他远程计算机,也没有删除几天前的备份文件:需要用户增加相关脚本,或者手动操作.
增量备份
增量备份的数据量比较小,但是要在完整备份的基础上操作,用户可以在时间和成本上权衡,选择最有利于自己的方式.
增量备份使用bin log,脚本如下:
#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "ing $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"
增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个.
因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了.
注:同样,用户也需要自己远程传送,不过不需要删除了,完整备份后程序会自动生成.
访问设置
脚本写完了,为了能让脚本运行,还需要设置对应的用户名和密码,mysqladmin和mysqlmp都是需要用户名和密码的,当然可以写在脚本中,但是修改起来不太方便,假设我们用系统的root用户来运行此脚本,那么我们需要在/root(也就是root用户的home目录)创建一个.my.cnf文件,内容如下
[mysqladmin]
password =password
user= root
[mysqlmp]
user=root
password=password
注:设置本文件只有root可读.(chmod 600 .my.cnf )
此文件说明程序使用mysql的root用户备份数据,密码是对应的设置.这样就不需要在脚本里写用户名和密码了.
自动运行
为了让备份程序自动运行,我们需要把它加入crontab.
有2种方法,一种是把脚本根据自己的选择放入到/etc/cron.daily,/etc/cron.weekly这么目录里.
一种是使用crontab -e放入到root用户的计划任务里,例如完整备份每周日凌晨3点运行,日常备份每周一-周六凌晨3点运行.
Ⅸ linux mysql中我用mysqlmp备份了全库内容,但是我只想恢复某一张表,怎么办
这个问题不是MYSQL数据库方面的问题,而是如何从一个文本文件中取出需要的部分内容的问题。 从数据库角度来说,没有什么好办法,可以使用操作系统中的文本编辑处理工具来实现。例如,如果不是太大,几百M可以用editplus,ultraedit等编辑工具打开找你需要sql拷贝出来导入。
如果是linux/unix,可参考如下方法:
1.使用 awk:
可以先到原数据库中使用 'show tables;' 查看数据库表的列表,注意,此列表已经按照字母排序,例如:
table1
table2
table3
然后使用awk 来过滤sql语句,假设你要恢复 table2 表,可以使用下面的语句:
awk ‘/^-- Table structure for table .table2./,/^-- Table structure for table .table3./{print}’ mympfile.sql > /tmp/recovered_table.sql
2.使用sed:
与上面类似,假设你要恢复 table2 表,可以使用下面的语句:
cat mympfile.sql | sed -n -e '/Table structure for table .test1./,/Table structure for table .test2./p' > /tmp/extracted_table.sql