Date :20140213
Auth: Jin
参考
http://blog.sina.com.cn/s/blog_757b0e130101erl5.html
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#federated-storage-engine

一、问题描述
1.目前应用情况
在mysql 3304实例中有phpcms,anquanzuo两个库,
phpcms有数据写入,anquanzu没有数据写入
anquanzu有一个视图表carseats_article 为phpcms库的三个表v9_news,v9_news_data,v9_category组合的视图
3304-anquanzuo>show create table carseats_article\G
*************************** 1. row ***************************
View: carseats_article
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`dbselect`@`192.168.201.201` SQL SECURITY DEFINER VIEW `carseats_article` AS select `a`.`id` AS `id`,`a`.`title` AS `title`,`a`.`catid` AS `module_id`,`a`.`thumb` AS `img`,`c`.`catname` AS `module_name`,`b`.`content` AS `content`,`a`.`username` AS `publish_user`,`a`.`status` AS `is_del`,`a`.`listorder` AS `order`,`a`.`updatetime` AS `update_time`,`a`.`inputtime` AS `add_time`,`b`.`copyfrom` AS `copyfrom`,`a`.`keywords` AS `keywords`,`a`.`islink` AS `islink`,`a`.`url` AS `url` from ((`phpcms`.`v9_news` `a` join `phpcms`.`v9_news_data` `b`) join `phpcms`.`v9_category` `c`) where ((`a`.`catid` = `c`.`catid`) and (`a`.`id` = `b`.`id`))
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

2、数据迁移
phpcms 迁移到mmm集群
anquanzuo 迁移至NDB Cluster (两台数据节点245,246,管理节点247)

3,问题
迁移anquanzuo库时无法创建carseats_article,因为phpcms库不在一个实例了

4、解决办法
以前SQL Server工作有用到DB link远程库
而mysql支持远程表
1)在phpcms创建需要的视图
2)在anquanzuo上创建远程表

二、创建mmm上phpcms的视图
到mmm的master服务器上
$ jump 121
# mysql -h 127.0.0.1 -P 3304 -u root -pjpasswd2011 phpcms
1、创建视图
DROP VIEW IF EXISTS `v_carseats_article`;
CREATE VIEW `v_carseats_article` AS
SELECT
`a`.`id` AS `id`,
`a`.`title` AS `title`,
`a`.`catid` AS `module_id`,
`a`.`thumb` AS `img`,
`c`.`catname` AS `module_name`,
`b`.`content` AS `content`,
`a`.`username` AS `publish_user`,
`a`.`status` AS `is_del`,
`a`.`listorder` AS `order`,
`a`.`updatetime` AS `update_time`,
`a`.`inputtime` AS `add_time`,
`b`.`copyfrom` AS `copyfrom`,
`a`.`keywords` AS `keywords`,
`a`.`islink` AS `islink`,
`a`.`url` AS `url`
FROM ((`v9_news` AS `a` JOIN `v9_news_data` AS `b`) JOIN `v9_category` AS `c`)
WHERE ((`a`.`catid` = `c`.`catid`) AND (`a`.`id` = `b`.`id`));

确认视图可以查询数据
3304-phpcms>select id,title from v_carseats_article limit 1;
+-------+-----------------------------------------+
| id | title |
+-------+-----------------------------------------+
| 96325 | 孩子们,圣诞老人真的存在! |
+-------+-----------------------------------------+
1 row in set (0.00 sec)

2、授权访问
grant select on phpcms.* to 'dbselect'@'192.168.201.%' identified by 'dmlpasswd'
注:线上已经有权限

三、修改NDB cluster支持FEDERATED [已准备好]
1、确实是否已经支持
$ jump 245
$ jump 246
mysql -S /mysql/dev/data4/mysql.sock -pjpasswd2013
mysql> select version();
+------------+
| version() |
+------------+
| 5.5.30-log |
+------------+
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

使用show engines 命令查看数据库是否已支持FEDERATED引擎:
Support 的值有以下几个:
YES 支持并开启
DEFAULT 支持并开启, 并且为默认引擎
NO 不支持
DISABLED 支持,但未开启

2、修改246
$ jump 247
1)确认信息
[root@JQ-pdt-host-247 ~]# ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=20 @192.168.201.245 (mysql-5.5.30 ndb-7.2.12, Nodegroup: 0, Master)
id=21 @192.168.201.246 (mysql-5.5.30 ndb-7.2.12, Nodegroup: 0,)

[ndb_mgmd(MGM)] 1 node(s)
id=10 @192.168.201.247 (mysql-5.5.30 ndb-7.2.12)

[mysqld(API)] 4 node(s)
id=30 @192.168.201.245 (mysql-5.5.30 ndb-7.2.12) ### 这里
id=31 @192.168.201.246 (mysql-5.5.30 ndb-7.2.12) ### 这里
id=32 (not connected, accepting connect from any host)
id=33 (not connected, accepting connect from any host)

2)停止从
[root@JQ-pdt-host-247 ~]# ndb_mgm ndb_mgm
ndb_mgm> 21 STOP
或者
[root@JQ-pdt-host-246 ~]# mysqld_multi report 3
Reporting MySQL servers
MySQL server from group: mysqld3 is running
[root@JQ-pdt-host-246 ~]# mysqld_multi stop 3 --password=jpasswd2011
[root@JQ-pdt-host-246 ~]# mysqld_multi report 3
Reporting MySQL servers
MySQL server from group: mysqld3 is not running

3)修改配置
[root@JQ-pdt-host-246 ~]# vim /etc/my.cnf
删除默认参数
skip-federated
打开
[mysqld3]
federated

4)启动
[root@JQ-pdt-host-246 ~]# mysqld_multi report 3
Reporting MySQL servers
MySQL server from group: mysqld3 is running

5)确认生效
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster | DEFAULT | Clustered, fault-tolerant tables | YES | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| ndbinfo | YES | MySQL Cluster system information storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

3、修改245
jump 245
同样的方法修改245
root@JQ-pdt-host-245 ~]# mysql -h127.0.0.1 -P3303 -uroot -pjpasswd2011
确认
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster | DEFAULT | Clustered, fault-tolerant tables | YES | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| ndbinfo | YES | MySQL Cluster system information storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)

四、数据迁移

1、导出数据
cd /home/backup
mysqldump -h192.168.201.210 -P3304 anquanzuo > anquanzuo_source_20140213.sql

2、修改数据并导入
cp anquanzuo_source_20140213.sql anquanzuo_ndb_20140213.sql

sed -i s/MyISAM/ndbcluster/ anquanzuo_source_20140213.sql
sed -i s/InnoDB/ndbcluster/anquanzuo_source_20140213.sql

删除anquanzuo_ndb_20140213.sql文件中 carseats_article创建语句,或者前面dump前就先删除 carseats_article视图
这不如果没有依赖前面的远程表则可以先做
mysql> use anquanzuo;
Database changed
mysql> source ./anquanzuo_ndb_20140213.sql;
ERROR 1146 (42S02): Table 'phpcms.v9_news' doesn't exist
清理不是很干净
mysql> show tables;
+----------------------------+
| Tables_in_anquanzuo |
+----------------------------+
| carseats_evaluation_report |
| carseats_goods |
| carseats_topic |
| carseats_topic_comment |
+----------------------------+
4 rows in set (0.01 sec)

把原来的远程表删了

把下面-- Final view structure for view `carseats_article`
也删除
后发现还报错phpcms.v9_news

这个步骤放在前面在创建远程表

确认246是否同步

3、准备远程表
-- 在anquanzuo上调整,注意调整ip
--drop table carseats_article;
mysql> create database anquanzuo;
mysql> use anquanzuo;
Database changed

create table carseats_article (
id mediumint(8) unsigned,
title varchar(80),
module_id smallint(5) unsigned,
img varchar(100),
module_name varchar(30),
content mediumtext,
publish_user char(20),
is_del varchar(2),
`order` int(10) unsigned,
update_time int(10) unsigned,
add_time int(10) unsigned,
copyfrom varchar(100),
keywords varchar(255),
islink tinyint(1) unsigned,
url varchar(255)
) ENGINE=FEDERATED CONNECTION='mysql://dbselec:dmlpasswd@192.168.201.121:3304/phpcms/v_carseats_article';

ip选择vip或者其他ip都可以

mysql> show tables;
+---------------------+
| Tables_in_anquanzuo |
+---------------------+
| carseats_article |
+---------------------+
1 row in set (0.00 sec)

查询
mysql> select id,title from carseats_article limit 1;
+-------+-----------------------------------------+
| id | title |
+-------+-----------------------------------------+
| 96325 | 孩子们,圣诞老人真的存在! |
+-------+-----------------------------------------+
1 row in set (45.47 sec)

另外一台246确认
[root@JQ-pdt-host-246 ~]# mysql -h127.0.0.1 -P3303 -uroot -pjpasswd2011 anquanzuo
mysql> show tables;
Empty set (0.00 sec)
可以见FEDERATED 存储引擎是不同步的
因为查询时两台都有可能查询到,所以246这台也要创建;
注意:

root@JQ-pdt-host-246 ~]# ll /data/mysql/data3/anquanzuo/
total 16
-rw-rw---- 1 mysql mysql 9068 Feb 13 16:59 carseats_article.frm
-rw-rw---- 1 mysql mysql 61 Feb 13 16:50 db.opt

除了ENGINE选项应该是FEDERATED, 并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外, 这个表的结构必须完全与远程表的结构相同.

五、总结
1、开启支持FEDERATED存储引擎,默认不知道
2、NDB cluster中不会同步远程表,因为不是NDBcluster存储引擎,所以每个SQL节点都要创建一次远程表,不然当使用到那个节点时候表不存在
3、远程表或视图需要先存在
4、FEDERATED支持及不支持的如下:
·远程服务器必须是一个MySQL服务器. FEDERATED对其它数据库引擎的支持可能会在将来被添加.
·FEDERATED表指向的远程表在通过FEDERATED表访问它之前必须存在.
·一个FEDERATED表指向另一个FEDERATED表是可能的, 但是必须小心不要创建一个循环.
·没有对事务的支持.
·如果远程表已经改变, 对FEDERATED引擎而言是没有办法知道的. 这个的原因是因为这个表必须象数据文件一样工作,
除了数据库其它任何都不会被写入. 如果有任何对远程数据库的改变, 本地表中数据的完整性可能会被破坏.
·FEDERATED存储引擎支持SELECT,INSERT,UPDATE,DELETE和索引. 它不支持ALTER TABLE,DROP TABLE或任何
其它的数据定义语言语句. 当前的实现不使用预先准备好的语句.
·执行使用SELECT,INSERT,UPDATE和DELETE, 但不用HANDLER.
·FEDERATED表不能对查询缓存不起作用.
这些限制中的一些在FEDERATED处理机的将来版本可能被消除.

mysql远程表/视图-应用的更多相关文章

  1. mysql远程表链接

    FEDERATED简介 FEDERATED存储引擎是访问远程数据库中的表,在平时开发中可以用此特性来访问远程库中的参数表之类的,还是非常方便的.使用时直接在本地构建一个federated表来链接远程数 ...

  2. mysql常用表/视图管理语句

    查看所有表  show tables; 查看表/视图结构 desc 表名/视图名: 查看建表过程  show create table 表名: 查看建视图过程 show create view 视图名 ...

  3. MySQL/MariaDB表表达式(3):视图

    视图是表表达式的一种,所以它也是虚拟表.对视图操作的时候会通过语句动态的从表中临时获取数据. 1.创建.修改视图 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED ...

  4. Linux 对mysql远程授权连接操作 和 查看mysql数据库和表 基本命令

    Linux 对mysql远程连接的授权操作 首先linux连接mysql数据库 授权: grant all on *.* to ' with grant option; //允许账户root从任何主机 ...

  5. 【3.3】mysql中的Federated存储引擎,远程表,相当于sql server的linked server

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  6. MySQL远程连接、用户授权

    目录 MySQL远程连接 创建用户.授权 MySQL添加用户.删除用户.授权及撤销权限 MySQL可授予用户的执行权限 MySQL远程连接 远程连接 授权 常见权限表 相关库:mysql 相关表:us ...

  7. MySQL 远程连接(federated存储引擎)

    标签:federated存储引擎 概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储 ...

  8. mysql-Federated存储方式,远程表,相当于sql server的linked server

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  9. Navicat for mysql 远程连接 mySql数据库10061、1045错误

    原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...

随机推荐

  1. Low overhead memory space management

    Methods, apparatus, and systems, including computer programs encoded on a computer storage medium, m ...

  2. 一个无线通信类投稿的期刊list

    转载一个,但是有些期刊的影响因子不是很对,要投的时候还是再到期刊主页上面看一看吧~ 期刊缩写 期刊全名 近年影响因子 P IEEE Proceedings Of The IEEE 3.686 IEEE ...

  3. Oracle简述

    Oracle是甲骨文公司推出的一款大型数据库管理系统.甲骨文公司成立于1977年,总部位于美国加利福尼亚州的红木滩.1989年,Oracle正式进入中国市场:2013年,甲骨文超越 IBM ,成为继 ...

  4. CSS/Compass修改placeholder的文字样式

    在HTML5中,<input>与<textarea>标签支持placeholder属性,用来定义无任何输入时的默认文字. 可以通过CSS修改placeholder的文字样式: ...

  5. POJ 2387 Til the Cows Come Home(dijkstra裸题)

    题目链接:http://poj.org/problem?id=2387 题目大意:给你t条边(无向图),n个顶点,让你求点1到点n的最短距离. 解题思路:裸的dijsktra,注意判重边. 代码: # ...

  6. hdu 1829(继续扩展并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  7. Linux下安装rz、sz命令(文件上传下载)

    yum install -y lrzsz 说明:rz命令本地上传文件到服务器:sz命令发送文件到本地.

  8. vue2.0项目结构和打包发布

    先来一张项目结构图: 本地开发测试运行的命令是npm run dev 打包发布的命令是 npm run build生成的dist文件夹里的文件就是我们可以布置到服务上的文件 但是呢,这打包好的文件的文 ...

  9. Python 2.7.13安装

    参考文章:安装Python 进入至Python官方网站,点击下载 下载完成后直接进行安装 选择安装的路径 选择安装的组件,请注意选择安装pip和Add python.exe to Path这两个选项 ...

  10. 三个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3

    一个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3,创建的是FTS4的虚拟表 # -*- coding:utf-8 -*- import json import s ...