场景 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。
如果是大表,这里可以用可传输表空间方式备份、恢复表,减少锁表时间。
MySQL 安装和启动服务,以及遇到的问题MySQL版本: mysql-5.7.13-winx64.zip (免安装,解压放到程序文件夹即可,比如 C:\Program Files\mysql-5.7.13-winx64)下载地址:http//dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13-winx64.zip遇到的问题:1. MySQL service 已经安装成功,创建了空的data文件夹,也填了初始化ini文件,但是无法启动2. cmd 执行指令 “mysql -uroot -p” 时提示:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”3. Windows服务管理启动MySQL服务时提示:“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”4. mysql 日志文件提示:“2016-07-12T08:14:12.661749Z 0 [Note] Plugin 'FEDERATED' is disabled. MySQL: Table 'mysql.plugin' doesn't exist”解决问题:其实这几个问题都是因为mysql 的初始化ini文件不正确导致,请注意以下几点1. 不能使用原有的初始化文件my-default.ini直接修改,那个只是给我们参考,在当前文件夹复制创建一个新的my.ini文件,填写好basedir和datadir 然后保存。# These are commonly set, remove the # and set as required.# basedir = C:\Program Files\mysql-5.7.13-winx64# datadir = C:\Program Files\mysql-5.7.13-winx64\data2. 创建data文件夹,且必须是空文件夹,如果已经有跑出一些mysql日志文件在这里,请删掉全部文件。3. 注册服务时CMD必须进bin目录,要不然会出错。执行cmd 命令:mysqld –initialize -insecure –user=mysqlC:\Program Files\mysql-5.7.13-winx64\bin4. mysql启动问题access denied for user 'root'@'localhost'(using password:YES)安装Mysql后利用SQLyogEnt启动是提示“access denied for user 'root'@'localhost'(using password:YES)”,开始我还为是因为是密码问题,后来上网查了查才知道root权限问题,我想可能是因为win7系统我在安装时没用以管理员身份进行安装,所以root角色没有权限,从网上找了一个解决方案解决了,在这里记录一下:1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程;2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:\mysql\ , CMD进入命令行;3. 运行 D:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld-nt --skip-grant-tables启动mysql,关闭权限的检查;4. 运行 D:\Program Files\MySQL\MySQL Server 5.5\bin\mysqladmin -u root flush-privileges password "newpassword" 重设root密码;5. 重新启动mysql服务;欢迎分享,转载请注明来源:内存溢出
评论列表(0条)