mysql怎么复制数据库 mysql 复制数据

如何复制mysql数据库到另一台电脑上?这种架构一般用在以下三类场景
1. 备份多台 Server mysql怎么复制数据库的数据到一台如果按照数据切分方向来讲mysql怎么复制数据库,那就是垂直切分 。比如图 2,业务 A、B、C、D 是之前拆分好mysql怎么复制数据库的业务,现在需要把这些拆分好的业务汇总起来备份,那这种需求也很适用于多源复制架构 。实现方法我大概描述下:业务 A、B、C、D 分别位于 4 台 Server , 每台 Server 分别有一个数据库来隔离前端的业务数据,那这样 , 在从库就能把四台业务的数据全部汇总起来 , 而不需要做额外的操作 。那没有多源复制之前,要实现这类需求,只能在汇总机器上搭建多个 MySQL 实例,那这样势必会涉及到跨库关联的问题,不但性能急剧下降,管理多个实例也没有单台来的容易 。
2. 用来聚合前端多个 Server 的分片数据 。
同样,按照数据切分方向来讲 , 属于水平切分 。比如图 3,按照年份拆分好的数据 , 要做一个汇总数据展现,那这种架构也非常合适 。实现方法稍微复杂些:比如所有 Server 共享同一数据库和表,一般为mysql怎么复制数据库了开发极端透明,前端配置有分库分表的中间件,比如爱可生的 DBLE 。
3. 汇总并合并多个 Server 的数据
第三类和第一种场景类似 。不一样的是不仅仅是数据需要汇总到目标端,还得合并这些数据,这就比第一种来的相对复杂些 。比如图 4,那这样的需求,是不是也适合多源复制呢mysql怎么复制数据库?答案是 YES 。那具体怎么做呢?
怎么复制MySQL数据库项目上 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. 使用 mysqldump 导出备份,然后将 SQL 文件中的对象所有者替换为导入账号 。
二、问题原因我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制 , 像视图、函数、存储过程、触发器等这些数据对象会存在一个 DEFINER 和一个 SQL SECURITY 的属性,如下所示:
--视图定义CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW v_test
--函数定义CREATE DEFINER=`root`@`%` FUNCTION `f_test()` RETURNS varchar(100) SQL SECURITY DEFINER
--存储过程定义CREATE DEFINER=`root`@`%` PROCEDURE `p_test`() SQL SECURITY DEFINER
--触发器定义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. 根据输出信息知道备份是否正常进行 , 防止备份中遇到元数据锁无法获取然后一直卡住的情况 。

推荐阅读