扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如果从库上表 t 数据与主库不一致,导致复制错误,整个库的数据量很大,重做从库很慢,如何单独恢复这张表的数据?通常认为是不能修复单表数据的,因为涉及到各表状态不一致的问题。下面就列举备份单表恢复到从库会面临的问题以及解决办法:
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的牙克石网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
场景 1
如果复制报错后,没有使用跳过错误、复制过滤等方法修复主从复制。主库数据一直在更新,从库数据停滞在报错状态(假设 GTID 为 aaaa:1-100)。
修复步骤:
在主库上备份表 t (假设备份快照 GTID 为 aaaa:1-10000);
恢复到从库;
启动复制。
这里的问题是复制起始位点是 aaaa:101,从库上表 t 的数据状态是领先其他表的。aaaa:101-10000 这些事务中只要有修改表 t 数据的事务,就会导致复制报错 ,比如主键冲突、记录不存在(而 aaaa:101 这个之前复制报错的事务必定是修改表 t 的事务)
解决办法:启动复制时跳过 aaaa:101-10000 这些事务中修改表 t 的事务。
正确的修复步骤:
1. 在主库上备份表 t (假设备份快照 GTID 为 aaaa:1-10000),恢复到从库;
2. 设置复制过滤,过滤表 t:
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db_name.t');
3. 启动复制,回放到 aaaa:10000 时停止复制(此时从库上所有表的数据都在同一状态,是一致的);
START SLAVE UNTIL SQL_AFTER_GTIDS = 'aaaa:10000';
4. 删除复制过滤,正常启动复制。
注意事项:这里要用 mysqldump --single-transaction --master-data=2,记录备份快照对应的 GTID
场景 2
如果复制报错后,使用跳过错误、复制过滤等办法修复了主从复制。主、从库数据一直在更新。
修复步骤:
在主库上备份表 t (假设备份快照 GTID为 aaaa:1-10000);
停止从库复制,GTID为 aaaa:1-20000;
恢复表 t 到从库;
启动复制。
这里的问题是复制起始位点是 aaaa:20001,aaaa:10000-20000 这些事务将不会在从库上回放,如果这里面有修改表 t 数据的事务,从库上将丢失这部分数据。
解决办法:从备份开始到启动复制,锁定表 t,保证 aaaa:10000-20000 中没有修改表 t 的事务。
正确修复步骤:
对表 t 加读锁;
在主库上备份表 t;
停止从库复制,恢复表 t;
启动复制;
解锁表 t。
如果是大表,这里可以用可传输表空间方式备份、恢复表,减少锁表时间。
如何往里面添加一个
字符型,长度为36
的字段?a:你需要把那个shows.myd
所在的那个文件夹拷贝到mysql安装目录的data目录下。
如果你是默认安装,应该在c:\program
files\mysql\mysql
server
5.0\data\
注意是整个shows那些文件所在的目录。连目录一起拷贝哈。按你的描述,就应该是data目录了。
将d:\data1\下的data目录拷贝到c:\program
files\mysql\mysql
server
5.0\data\下面。
完成之后,重启mysql看看,可以运行services.msc
在里面找到mysql
重新启动mysql。(前提是你安装的时候配置了mysql服务,我想你应该配置了吧)
重启之后
进入命令行,
然后mysql
-uroot
-p
进入mysql
show
databases;
看看能不能看到一个叫data数据库。
如果能看到,恭喜你,
继续下面的命令。
如果不行,看后面的方法b。
use
dataalter
table
shows
add
列名
类型
长度
等等举例:增加一个int型名为id的列
alter
table
shows
add
id
int(11)
not
null
default
'0';
alter
table
shows
add
name
varchar(32)
not
null
default
'';
如果需要指定列的位置,假如加入的列在number列后面。那么
alter
table
shows
add
id
int(11)
not
null
default
'0'
after
number;方法b。
如果按之前说的文件拷贝方式,重启进入mysql后看不到data
这个数据库,那么可能是你们的mysql版本不一致造成的,应该说这个可能性很大。
那么,你让你朋友给你导出数据库内容。
用mysqldump命令。
mysqldump
-uroot
-p
-d
数据库名.表名
sss.sql
你拿到这个sss.sql后
再把它导入到你的mysql数据库。
在cmd下运行
mysql
-uroot
-p
testsss.sql或者在mysql命令行下运行use
testsource
sss.sql
这样shows表就导入到你的test数据库了。
剩下的就简单了哈。和前面没啥差别。
首先备份好你本地的数据库,方法如下。
1、用apmserv5.2.6(网站上面有下载)带的phpmyadmin
进行备份恢复。
a、运行apmserv5.2.6,
点击右边的“管理mysql
数据库”。服务器填写127.0.0.1:3306,
登入名称:root,密码为空进行登录。在左边是数据库列表。点击你的数据库。点导出、拉到
最下面把“另存为文件”打勾。点执行。这样你就可以备份你的数据库了。
2、运行mysql-front
备份恢复你的数据库。
a、新建一个登录。
信息栏中随便写一下名字。标识你的登录信息。
b、点击连接栏,分别填好:
服务器:服务器的ip
端
口:一般为3306
c、点击注册栏,分别填好:
用
户:你申请的数据库的用户名(如果是本地一般为root),
密
码:数据库的密码(本地为空)
数据库:你申请的数据库名。
填写好这些信息后点击“确定”这样就能链接到你的远程数据库了。左边这个远程数据。
服务器的一些数据库,点击你的数据库后等待链接。直至返回所有数据,你便能打开你的数据库。
中的数据表了。在这里你可以修改你的数据表结构,删除填加数据等(小心操作)。
d、右键点击你的数据库进行备份(输出)数据,有几种备份的类型,一般选sql。
有两种办法。
1、在b机器上装mysql。
将a机器上的mysql/data下的你的数据库目录整个拷贝下来。
将b机器上的mysql服务停止。
找到b机器上的mysql/data目录,将你拷贝的目录粘贴进去,然后启动mysql服务就可以了。
2、使用sql语句备份和恢复
你可以使用select
into
outfile语句备份数据,并用load
data
infile语句恢复数据。这种方法只能导出数据的内容,不包括表的结构,如果表的结构文件损坏,你必须要先恢复原来的表的结构。
语法:
select
*
into
{outfile
¦
dumpfile}
’file_name’
from
tbl_name
load
data
[low_priority]
[local]
infile
’file_name.txt’
[replace
¦
ignore]
into
table
tbl_name
select
...
into
outfile
’file_name’
在dos命令提示符下使用mysqldump命令进行备份.
如下:
c:\documents
and
settings\administratormysqldump
yinshi
c:\\backup.txt
-uroot
-p12142022
1. 预使mysql开机自启动,首先需要注册mysql为ubuntu下的服务。
直接拷贝MySQL.server文件至/etc/init.d/目录下即可。
sudo cp $MYSQL_HOME/support-files/mysql.server /etc/init.d/mysql.server
sudo chmod +x /etc/init.d/mysql.server
2. 修改my.cnf,指定mysql的启动用户
定义:命令1=”./mysql.server start –user=user1“,命令2=”./mysql.server start”。(注意,命令1、2的区别在于红色部分)
在编译安装mysql的过程中,若执行configure命令时指定“–user=user1”参数,则mysql将由用户user1启动,在mysql.server文件中会有“user=user1”这样一行来指定mysql的启动用户,但该行指定的启动用户并未生效。即,需要使用命令1来启动mysql,命令2启动失败。
为了使命令2生效,同时为了mysql开机自启动,需要修改my.cnf,在[mysqld]区块下添加“user=user1”这样一行。如此,便可使用命令2启动mysql,mysql也可以成功开机自启动。
3. 设置mysql开机自启动
安装完成后,有两种启动方式:
1、到服务面板里面启动mysql服务
2、在dos窗口下,通过命令net
start
mysql(你的服务名)
启动
启动后,可到mysql的安装目录的bin目录下,打开dos窗口,然后命令mysql
-uxxx
-pxxx
即可进入mysql客户端。
有问题欢迎提问,满意请采纳!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流