本次改造的目标有三个:
1、 重做镜像,解决原来主从数据不一致问题
2、 把mysql双向复制改为单向复制
3、 Report依赖改造:40.5上ysanalytics新加入ysanalytics数据库,把Dev_authserver中的一些静态统计表导入到ysanalytics库中,原来专门的ysanalytics数据库机器取消。
生产环境上的操作步骤
一、操作人:田志祥,停止所有应用tomcat。操作人:田志祥,
二、操作人:田志祥,停止40.5机器上的heartbeat,确认机器重启时heartbeat不会自动重新启动。
三、去除原主备机的双复制机制,从主机上把数据导出到备机上重做镜像,并配置为单向镜像。由周耀荣完成。
1、主服务器上备份所有数据库:
在主机上执行升级前备份操作:
备份前进行锁所有表操作
mysql>FLUSH TABLES WITH READ LOCK;
在新的SSH窗口中使用原来升级前备份脚本备份正在使用的数据库。
备份完成后给所有表去锁
mysql>UNLOCK TABLES;
把备份集拷贝到30.18备份机上备份
2、在主机与备机上停止mysql:
stop slave;
mysqladmin shutdown -p
3、修改主机与备机上的/etc/my.cnf文件,注释掉复制的配置信息
master-host = 192.168.40.5
master-user = replica
master-password = replica
master-port = 3306
4、主机与备机上更改log-bin到专门目录
修改/etc/my.cnf,把log-bin=bin更改为log-bin=/usr/local/mysql/log-bin/bin
创建相应的目录,把原先的log-bin相关文件迁移到该目录,并授权给mysql用户
mkdir /usr/local/mysql/log-bin
cd /usr/local/mysql/data
mv bin.* /usr/local/mysql/log-bin/
chown -R mysql: /usr/local/mysql/log-bin
5、删除主机与备机上的复制相关文件
删除所有与复制有关的文件:
cd /usr/local/mysql/data
rm master.info relay-log.info
rm *relay-bin*
6、修改备机上的/etc/my.cnf文件,修改隔离级别,配置复制时忽略mysql与ysanalytics
transaction_isolation = READ-UNCOMMITTED
replicate-ignore-db = mysql
replicate-ignore-db = ysanalytics
7、启动主机和备机mysql,使用show slave status\G查看原先slave状态是否已经去除。
mysqld_safe --user=mysql &
8、删除主机与备机多余的数据库
drop database Dev_authserver071103
drop database Dev_authserver071116
drop database Dev_dataserver071103
drop database Dev_dataserver071116
drop database Test_Dev_dataserver
drop database Test_kd_admin
drop database kd_admin071103
drop database kd_admin071116
9、在主机上对Dev_authserver、Dev_dataserver、kd_admin三个数据库做备份,并记录同步点
在主机上用show processlist命令确保数据库无连接,用下面命令锁住所有的表:
FLUSH TABLES WITH READ LOCK;
新开一个到主机SSH窗口,对Dev_authserver、Dev_dataserver、kd_admin三个数据库做备份
mysqldump -p${passwd} -R --single-transaction Dev_authserver > ysdb_Dev_authserver_forslave_20081126.sql
mysqldump -p${passwd} -R --single-transaction Dev_dataserver > ysdb_Dev_dataserver_forslave_20081126.sql
mysqldump -p${passwd} -R --single-transaction kd_admin > ysdb_kd_admin_forslave_20081126.sql
tar czf ysdb_forslave_20081126.tgz *forslave_20081126.sql
使用mysql命令SHOW MASTER STATUS;查看主机当前bin-log文件名与位置并做记录。
把备份文件传到备机上
scp -P 2222 ysdb_forslave_20081126.tgz root@192.168.40.5:/root
备份完成后,在主机原来锁表窗口发出下面来解表锁:
UNLOCK TABLES;
主机已经有复制用户的授权,如果没有请用下面的语句来授权:
use mysql;
delete from user where user="replica";
flush privileges;
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.40.%' IDENTIFIED BY 'replica';
10、在备机上把Dev_authserver、Dev_dataserver、kd_admin三个数据库删除后重新创建,并导入从主机备份的数据文件。
在备机40.5上删除这三个数据库并重新创建:
drop database kd_admin;
drop database Dev_dataserver;
drop database Dev_authserver;
create database kd_admin;
create database Dev_dataserver;
create database Dev_authserver;
导入为重做镜像备份的数据:
cd /root
tar xzf ysdb_forslave_20081126.tgz
mysql -p${passwd} kd_admin < ysdb_kd_admin_forslave_20081126.sql
mysql -p${passwd} Dev_dataserver < ysdb_Dev_dataserver_forslave_20081126.sql
mysql -p${passwd} Dev_authserver < ysdb_Dev_authserver_forslave_20081126.sql
在备机的mysql上发出下面复制配置语句:
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.40.6',
MASTER_USER='replica',
MASTER_PASSWORD='replica',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS=recorded_log_position;
把文件名和位置改为步骤9中记录的文件名和位置。
最后发出start slave指令并用show slave status\G查看是否正常。确认一下ysanalytics数据库在复制时被ignore。
四、备机40.5上增加ysanalytics数据库,把Dev_authserver中的一些静态统计表导入到ysanalytics库中,停止原来的ysanalytics数据库。由周耀荣完成。
1、操作人:田志祥,在192.168.30.28上停用crontab的数据处理任务,关闭apache。
crontab -e
apachectl stop
2、在原来ysanalytics数据库机器192.168.30.28上,用show processlist命令确保当前无用户连接。备份ysanalytics数据库,把文件传到备机40.5上。
mysqldump -p${passwd} -R --single-transaction ysanalytics > ysdb_ysanalytics_formigrate_20081126.sql
tar czf ysdb__formigrate_20081126.tgz ysdb_ysanalytics_formigrate_20081126.sql
scp -P 2222 ysdb__formigrate_20081126.tgz root@192.168.40.5:/root
关闭数据库:
mysqladmin -p shutdown
3、在备机40.5上新建ysanalytics数据库,把30.28上备份的数据文件导入到ysanalytics数据库中。
cd /root
tar xzf ysdb__formigrate_20081126.tgz
create database ysanalytics;
mysql -p{passwd} ysanalytics < ysdb_ysanalytics_formigrate_20081126.sql
4、在主机40.6的Dev_authserver数据中执行Dev_authserver.20081125.sql脚本(里面有更改一个静态统计表名)。在备机上确认同步状态是正常的,确认表名已经被更改。
5、在备机40.5上执行shell脚本dump_statics_tables.sh(里面的数据库密码需要修改为生产环境的密码),完成从Dev_authserver导出几个静态统计表,并导入到ysanalytics数据库中。
6、在备机40.5的ysanalytics数据库中执行ysanalytics.20081125.sql
五、备机40.5上的用户授权。由周耀荣完成。
1、在备机上执行下面授权命令:
grant select on Dev_authserver.* to 'ysweb_readonly'@'%' identified by 'ysWeb@2008@))*';
grant all on ysanalytics.* to 'ysweb_readonly'@'%' identified by 'ysWeb@2008@))*';
grant execute on procedure Dev_authserver.pro_calculate_for_t_stat_user_analysis to 'ysweb_readonly'@'%' identified by 'ysWeb@2008@))*';
grant execute on procedure Dev_authserver.procedure_for_t_stat_user_analysis_new to 'ysweb_readonly'@'%' identified by 'ysWeb@2008@))*';
2、确保备机没有用户:ysWeb、replica
确保主机没有用户:ysweb_readonly
use mysql;
select user,host from user;
如果需要删除用户,可以使用下面的用户删除语句:
use mysql;
delete from user where user="username";
flush privileges;
3、操作人:田志祥,在192.168.30.28上修改 YSANALYTICS应用的配置文件,然后启动crontab的定时数据处理任务
YSANALYTICS数据库配置文件路径
%APACHE%/config.inc.php
配置文件(config.inc.php)代码说明
@define("USERNAME", "ysweb_readonly"); //数据库用户名
@define("PASSWORD", "ysWeb@2008@))*"); //数据库密码
@define("DBNAME","ysanalytics"); //数据库名称
@define("SERVERNAME", "192.168.40.5"); //数据库服务器IP
crontab -e
apachectl start
六、主机40.6上把步骤四已经导出的表态统计表删除掉。由周耀荣完成。
在主机40.6上删除Dev_authserver中已经导入到备机ysanalytics的静态统计数据表
use Dev_authserver;
drop table t_stat_corp_catalog;
drop table t_stat_corp_city_dist;
drop table t_stat_corp_province_dist;
drop table t_stat_exchange;
drop table t_stat_member;
drop table t_stat_message;
drop table t_stat_saas_dist_city;
drop table t_stat_saas_dist_prov;
drop table t_stat_saas_period;
drop table t_stat_searchkey;
drop table t_stat_trade_dist;
drop table t_stat_user_analysis;
drop table t_stat_user_analysis_new;
drop table t_stat_user_count;
drop table t_stat_user_increase;
drop table t_temp_SaasUser_Info;
drop table t_stat_partner_user_list;
在备机上确认该操作已经生效,show slave status\G,并查看表是否已经删除。
通过脚本来附加验证同步是否正常(脚本里面的密码必须更改为生产环境的密码)
在主机40.6上执行
./add_testtable.sh
查看主备机的Dev_authserver库是否已经都有test_monitor_slave表,里面都有10条数据
在主机40.6上执行
./del_testtable.sh
查看主备机上的test_monitor_slave是否都已经被删除。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15119715/viewspace-677116/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15119715/viewspace-677116/