mysql 垮服务、垮库查询 Federated引擎

来源:互联网 发布:js动态增加删除表格 编辑:程序博客网 时间:2024/04/28 08:34


在/etc/my.cnf 的mysqld下面加入    federated
# ls -l /usr/local/mysql/lib/plugin/ha_federated.so -rwxr-xr-x 1 mysql mysql 308361 Jun 11  2014 /usr/local/mysql/lib/plugin/ha_federated.soSQL>install plugin federated soname 'ha_federated.so';# /usr/local/mysql/support-files/mysql.server restart


federated表样例

CREATE TABLE `opus` (  `opus_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '??id',  `player_id` int(20) NOT NULL COMMENT '??ID',  `opus_name` varchar(100) NOT NULL COMMENT '????',  `create_time` datetime NOT NULL COMMENT '??????',  `create_timestamp` bigint(20) DEFAULT NULL COMMENT '??????',  `opus_hash` varchar(32) NOT NULL COMMENT '??Hash(????)',  `song_hash` varchar(128) DEFAULT NULL COMMENT '??hash?',  `opus_desc` varchar(300) DEFAULT NULL,  `status` tinyint(2) DEFAULT '1' COMMENT '1:?? 0????? -1?????',  `opus_parentid` bigint(20) DEFAULT '0' COMMENT '???id(0???????)',  `listen_num` int(10) DEFAULT '0' COMMENT '???',  `comment_num` int(10) DEFAULT '0' COMMENT '???',  `praise_num` int(10) DEFAULT '0' COMMENT '??',  `gift_person_num` int(10) DEFAULT '0' COMMENT '?????',  `forward_num` int(10) DEFAULT '0' COMMENT '???',  `modify_time` datetime DEFAULT NULL COMMENT '????',  `song_from_type` tinyint(2) DEFAULT NULL COMMENT '?????0.?? 1.???',  `song_id` int(11) NOT NULL COMMENT '??id',  `ip` bigint(20) DEFAULT '0' COMMENT '??ip',  `opus_time` int(11) DEFAULT '0' COMMENT '?????? ??s',  `inviter_id` int(11) DEFAULT NULL,  PRIMARY KEY (`opus_id`),  KEY `opus_parentid` (`opus_parentid`),  KEY `create_time` (`create_time`),  KEY `player_id` (`player_id`),  KEY `create_timestamp` (`create_timestamp`),  KEY `song_id` (`song_id`)) ENGINE=federated connection="mysql://tempusr:temppass@10.1.3.30:3306/kugou_sing/opus";;/*Table structure for table `opus_lrc` */DROP TABLE IF EXISTS `opus_lrc`;CREATE TABLE `opus_lrc` (  `opus_id` int(11) NOT NULL COMMENT '??Id',  `lrc_id` int(11) DEFAULT NULL COMMENT '??id',  `song_name` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '???',  `hash_key` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '???',  `time_span` int(11) DEFAULT NULL COMMENT '??',  `singer_name` varchar(30) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '???',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '????',  `ajust` int(11) DEFAULT NULL COMMENT '????',  `opsu_channel_id` int(11) DEFAULT '0',  `snippet_ajust` int(11) DEFAULT NULL COMMENT '??a??–????“??‰???μ ?-?èˉ?????§??—?é—′',  PRIMARY KEY (`opus_id`)) ENGINE=federated connection="mysql://tempusr:temppass@10.1.3.30:3306/kugou_sing/opus_lrc";CREATE TABLE `opus_gift` (  `opus_id` bigint(20) NOT NULL COMMENT '作品id',  `player_id` int(11) NOT NULL COMMENT '送礼人的玩家id',  `gift_id` int(11) NOT NULL COMMENT '礼物id',  `num` int(11) NOT NULL COMMENT '数量',  `last_modify_time` bigint(20) NOT NULL COMMENT '最后修改时间',  UNIQUE KEY `opus_id` (`opus_id`,`player_id`,`gift_id`)) ENGINE=federated connection="mysql://tempusr:temppass@10.1.81.171:3306/kugou_sing_consume/opus_gift";


ENGINE=federated connection="mysql://tempusr:temppass@10.1.3.30:3306/kugou_sing/opus";;
重点在于这里,需要连接到的库,就要在这个库授权:

grant all PRIVILEGES on discuz.* to ted@'123.123.123.123' identified by '123456';
上面的语句表示将 discuz 数据库的所有权限授权给 ted 这个用户,允许 ted 用户在 123.123.123.123 这个 IP 进行远程登陆,并设置 ted 用户的密码为 123456 。
下面逐一分析所有的参数:
all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。
discuz.* 表示上面的权限是针对于哪个表的,discuz 指的是数据库,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授 权为“数据库名.表名”。
ted 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。这里为了易用性你最好用root用户,因为别人远程的时候也会用,密码也要用root用户的密码,因为别人也是这么用的。(保证大家都用同一个登录信息访问同一个数据库,这是非常重要的)
123.123.123.123 表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。
123456 为用户的密码。
执行了上面的语句后,再执行下面的语句,方可立即生效。
CODE: [COPY]
> flush privileges;

查看远程数据库的访问权限更新之后的情况:




全表federated=============================sh脚本


#!/bin/bash#获取远程数据表数据/usr/local/mysql/bin/mysql -h 10.1.0.211 -ufederated_user -p'kgfederated' -Ne "select table_name,':',table_schema from information_schema.tables where table_schema in ('d_fanxing','d_fanxing_log','d_fanxing_log2');" >> table_name.txt#将数据写入数组COUNT=`cat table_name.txt | wc -l`array_table_name=($(cut -d":" -f1 table_name.txt))array_table_schema=(`cut -d":" -f2 table_name.txt`)#编辑创建表SQL,如果涉及到数据库名的变更则需要适当修改for((i=0;i<$COUNT;i++)) do         /usr/local/mysql/bin/mysql -h 10.1.0.211 -ufederated_user -p'kgfederated' -Ne "show create table \`${array_table_schema[i]}\`.\`${array_table_name[i]}\`;" > create_statement_src.sql        sed -i "s#\`${array_table_name[i]}\`#\`${array_table_schema[i]}\`.\`${array_table_name[i]}\`#g" create_statement_src.sql        sed -i "s#ENGINE=InnoDB#ENGINE=FEDERATED connection = 'mysql://federated_user:kgfederated@10.1.0.211:3306/${array_table_schema[i]}/${array_table_name[i]}'#g"  create_statement_src.sql        cat create_statement_src.sql >> create_statement_dst.sqldonesed -i "s/$/;/g" create_statement_dst.sqlcat create_statement_dst.sql | cut -f2 >> create_statement_dest_final.sql/usr/local/mysql/bin/mysql -uroot -p'kgsql@)!)tmp' --socket=/data2/mysql/3309/mysql3309.sock < create_statement_dest_final.sql

=========本地sql查询

mysql -h 10.1.0.0 -uuser -ppass -N < 2.sql > tmp/2rs.txt
-N 不要表头

-e执行sql

2.sql 是要执行的sql语句 

2rs.txt 是结果输出


0 0