台州响应式建站,武威市建设局网站 放管服,房地产销售渠道拓客方案,营销型 展示类网站模板因为一些内容审查方面的原因#xff0c;一个运行了很久的论坛被要求限期迁移出现有机房。管制很严#xff0c;要求在1-2天内完成。论坛的文件#xff08;主要是图片及附件#xff09;100多G,数据库有80G。我评估了一下#xff0c;导出数据#xff0c;部署新环境#xff…因为一些内容审查方面的原因一个运行了很久的论坛被要求限期迁移出现有机房。管制很严要求在1-2天内完成。论坛的文件主要是图片及附件100多G,数据库有80G。我评估了一下导出数据部署新环境导入数据调试到能正常访问1-2天可能有点紧张万一迁移不顺利还得花费更多的时间。但没办法拒绝先答应下来再说。如果不想看文字猛戳此处看视频临场感更强。跟其它技术人员讨论了一下先临时采取投机取巧方式应付检查其措施如下1、在其它不受内容审核的地区部署一个代理用nginx就行。2、修改现论坛web的监听端口由80改成8989暂时先不改配好nginx反向代理以后绑定本地hosts域名指向新部署服务器的ip地址访问确认没问题再修改到8989端口。同时代理nginx转发端口也对应改成8989。3、修改dns把域名解析到代理web服务器的ip。这样处理避开了审查为迁移赢得了时间。安排异地机房的技术给我们部署系统因为经验以及其它方面的原因花了将近一天的时间才交付过来幸亏采取了前边的临时措施。为了加快进度我们自己做了分工一人负责新系统部署php、nginx和mysql运行环境而我负责导出数据。导出数据分两部分论坛数据本身压缩打包、数据库数据导出再压缩打包。开始我习惯性的用mysqldump --all-databases 全库导出过程很顺利导出后打包再复制到别的地方大概2个小时。新系统那边环境已经部署好了我试着进行导入进行了几十分钟报错因为中文字符的问题尝试了几种方式还是一样只得放弃。重新回源服务器换成innobackup导出。悲催的是这个服务器的系统太老了为centos 5.8,安装xtrabackup有依赖问题需要使用yum来处理一些依赖但系统自带的yum源没有了只好重新构造了一个Centos-Base.repo,其内容如下[base]nameCentOS-$releasever - Base#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoos#baseurlhttp://mirror.centos.org/centos/$releasever/os/$basearch/baseurlhttp://vault.centos.org/5.11/os/$basearch/gpgcheck1gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5#released updates[updates]nameCentOS-$releasever - Updates#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoupdates#baseurlhttp://mirror.centos.org/centos/$releasever/updates/$basearch/baseurlhttp://vault.centos.org/5.11/updates/$basearch/gpgcheck1gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5#additional packages that may be useful[extras]nameCentOS-$releasever - Extras#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoextras#baseurlhttp://mirror.centos.org/centos/$releasever/extras/$basearch/baseurlhttp://vault.centos.org/5.11/extras/$basearch/gpgcheck1gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5#additional packages that extend functionality of existing packages[centosplus]nameCentOS-$releasever - Plus#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepocentosplus#baseurlhttp://mirror.centos.org/centos/$releasever/centosplus/$basearch/baseurlhttp://vault.centos.org/5.11/centosplus/$basearch/gpgcheck1enabled0gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5#contrib - packages by Centos Users[contrib]nameCentOS-$releasever - Contrib#mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepocontrib#baseurlhttp://mirror.centos.org/centos/$releasever/contrib/$basearch/baseurlhttp://vault.centos.org/5.11/contrib/$basearch/gpgcheck1enabled0gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5再测试 yum install lrzsz 正常。从网上下载备份的安装包percona-xtrabackup-2.3.10.tar.gz用yum 安装libaio-devel、gccvim-comm等几个依赖包。另外在编译该软件是会提示cmake的版本过低需要替换一下。下载cmake-3.9.6.tar.gz,tar开以后执行 ./configure --prefix/usr/local/cmake make ;make install 把新版本限定到目录/usr/local/cmake这样就不用处理旧版本也不会与其产生冲突。编译安装时带上cmake的全路径/usr/local/cmake/bin/cmake -DBUILD_CONFIGxtrabackup_release make -j4 如果出现“CMake Error at cmake/libev.cmake:23 (MESSAGE)”报错信息手动安装包libev-3.7.tar.gzyum不到的步骤为tar zxvf libev-3.7.tar.gzcd libev-3.7./configuremake;make install这个不需要指定安装路径方便cmake执行的时候找得到。费了好大一通时间才把这个备份软件安装好虽然描述得有些啰嗦但可能对其它人排错会有帮助。现在开始切入正题.执行备份1、确保源数据库处于启动状态2、执行指令innobackupex --userroot --passwordMaGiCdB1 --defaults-file/etc/my.cnf /data1/dumpdir备份目录是任意足够大的分区3、检查备份目录是否产生数据4、执行 innobackupex --apply-log /data1/dumpdir/2018-03-30_11-10-53压缩和传输文件(论坛数据文件与此步骤相同不再说明)tar czvf 2018-03-30_11-10-53.tgz 2018-03-30_11-10-53rsync -avz -e ssh -p 2222 2018-03-30_11-10-53.tgz 120.189.55.109:/data1/特别值得注意的是由于数据量比较大避免shell中断导致任务终止尽量在screen下进行操作就算shell退出也不会受到影响。到此为止源服务器的操作暂告一段落。数据量相对来说比较大因此传输过程花了好长一段时间。在这同时在目的服务器把安装好的环境配置成与源站基本一致操作系统版本、php、ngnix、mysql做了升级相同的目录结构、相同的内网ip、相同的用户帐号。这样就可以直接把源站nginx配置、mysql配置、php原样同步过来。目前因为没有数据库数据导入及论坛文件我先试着在nginx配置的站点根文档写一个php测试脚本test.php内容为:? phpinfo(); ?.把nginx及php服务都启动起来浏览器访问该url检查一下php都有哪些模块被加载与源站是不是差不多的情形。测试完记得删掉它这个是安全隐患哟nginx的主配置文件nginx.conf如下节录user www www;worker_processes 8;#dso {# load ngx_http_cache_purge_module.so;#}worker_rlimit_nofile 51200;events { use epoll; #use kqueue; #FreeBSD system worker_connections 51200;}http { include mime.types;....................此处省略.............................map $request_method $limit { default ; POST $binary_remote_addr; }limit_conn_zone $binary_remote_addr zoneone_limit:10m;limit_req_zone $limit zonezone_limit_post:10m rate10r/m;log_format post $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $host $request_time $proxy_add_x_forwarded_for $request_body;access_log /data/logs/http.a.log;error_log /data/logs/http.e.log;#include vhosts/test.conf;include vhosts/default.conf;include vhosts/bbs.formyz.net.conf;include vhosts/file.formyz.net.conf;}某个站点的配置文件 bbs.formyz.net.confserver { listen 80; server_name bbs.formyz.net; error_page 404 http://bbs.formyz.net; access_log /data/logs/bbs.formyz.net-access; error_log /data/logs/bbs.formyz.net-error; limit_conn one_limit 5; root /data/html/bbs.formyz.net; index index.html index.htm forum.php index.php; if ($host ! bbs.formyz.net ) { rewrite ^/(.*)$ http://bbs.formyz.net/$1 permanent; } if (-d $request_filename) { rewrite ^/(.*)([^/])$ http://$host:$server_port/$1$2/ permanent; } location ^~ /config { deny all; } location ^~ /.git { deny all; } location ~ /(data|static|template|images|uc_server/data)/.*\.(php|php5|html)?$ { deny all; location ~ .*\.(php|php5)$ { limit_req zonezone_limit_post burst5; if ($request_method POST) { access_log /data/logs/bbs.formyz.net-post post; } root /data/html/bbs.formyz.net; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } location / { limit_conn one_limit 5; rewrite ^(.*)/topic-(.)\.html$ $1/portal.php?modtopictopic$2 last; rewrite ^(.*)/article-([0-9])\.html$ $1/portal.php?modarticlearticleid$2 last; rewrite ^(.*)/forum-(\w)-([0-9])\.html$ $1/forum.php?modforum displayfid$2page$3 last; rewrite ^(.*)/thread-([0-9])-([0-9])-([0-9])\.html$ $1/forum.php?modviewthreadtid$2extrapage%3D$4page$3 last; rewrite ^(.*)/group-([0-9])-([0-9])\.html$ $1/forum.php?modgroupfid$2page$3 last; rewrite ^(.*)/space-(username|uid)-(.)\.html$ $1/home.php?modspace$2$3 last; rewrite ^(.*)/([a-z])-(.)\.html$ $1/$2.php?rewrite$3 last; break; }}这里是每一个站点用一行include 显示的包含。偏偏有不少人至少我碰到不少喜欢用 include *.conf把所有的站点都包含进去我不太赞同这种做法配置的时候你是方便了可是到了要维护的时候就不是那么方便了。为什么这样说假设现在做维护我打开nginx.conf大概就可以看到有哪些站点当然文件命名也要规划好能望文生义特别是在一个nginx下站点多的场景对某个站点进行临时维护只要在主配置文件nginx.conf注释掉与它关联的include行重载nginx即可。接下来给出php-fpm.conf文件的部分内容[global]error_log log/php-fpm.logprocess.max 5000rlimit_files 10240[www]user wwwgroup wwwlisten 127.0.0.1:9000pm dynamicpm.max_children 5000pm.start_servers 50pm.min_spare_servers 20pm.max_spare_servers 80pm.max_requests 5000access.log log/php.access.logslowlog log/php.log.slowrequest_slowlog_timeout 3与nginx相对应php也以普通用户www来运行同时所有站点目录都授权属主、属组为www保证正确与合理的权限。一些经验不足的人不注意程序权限与目录权限的对应关系运行服务只要提示权限不够就立马执行 chmod -R 777 dir 你这是在方便别人进入系统呢另外php开启了慢查询日志在运行中排错或者排查性能问题会很有帮助不过我自己不懂php一般都是让开发人员自己看这个日志了他懂的。把论坛源站复制来的数据文件tar解包后放置在nginx指定的目录然后用chown -R www:www /data/html 及chmod -R 755 赋权这个过程比较容易完成不再赘述。前边用mysqldump出来的文件导入失败这次换成innobackup根据以往的经验不应该有问题。注意用此工具导入时mysql不要初始化也不要启动这个是废话了没初始化当然不能启动。为方便大家了解全过程顺便把mysql的选项文件my.cnf(不叫配置文件哟)贴出来供大家参考[client]port3306socket/tmp/mysql.sock[mysqld]character-set-serverutf8collation-serverutf8_general_ciskip-external-lockingskip-name-resolveusermysqlport3306datadir/data/mysql_dbopen_files_limit10240back_log600max_connections500max_connect_errors6000wait_timeout605800#open_tables600#table_cache 650#opened_tables 630max_allowed_packet32Msort_buffer_size4Mjoin_buffer_size4Mthread_cache_size300query_cache_type1query_cache_size256Mquery_cache_limit2Mquery_cache_min_res_unit16ktmp_table_size256Mmax_heap_table_size256Mkey_buffer_size256Mread_buffer_size1Mread_rnd_buffer_size16Mbulk_insert_buffer_size64Mlower_case_table_names1default-storage-engineINNODBinnodb_buffer_pool_size2Ginnodb_log_buffer_size32Minnodb_log_file_size128Minnodb_flush_methodO_DIRECTthread_concurrency32long_query_time2slow-query-logonslow-query-log-file/data/mysql_db/mysql-slow.log[mysqldump]quickmax_allowed_packet32M按my.cnf指定的datadir/data/mysql_db创建好目录/data/mysql_db,并执行chown -R mysql:mysql /data/mysql 授权。这时/data/mysql_db目录是空的。如果担心出错坐好姿势深呼吸庄重地敲入screen然后再执行如下命令行2018-03-30_11-10-53为源数据库文件解包后的目录innobackupex --defaults-file/etc/my.cnf --copy-back /data/2018-03-30_11-10-53这个过程同样比较耗时没事的话可以另外再开一个终端进入目录/data/mysql_db可以看到不断有目录和文件自动生成。执行完毕且没有报错基本上就大功告成了。由于安全的原因mysql对连接帐户有访问限制迁移到新系统以后也一样要遵循这个规则。前边已经启动了nginx 和php服务这里把mysql服务也启动起来。在个人的电脑绑定windows的hosts文件把域名与服务器的ip地址临时关联起来再在浏览器输入域名提示网页无法访问。已经检查php等配置正确那么问题就在连接数据库这个上边了。进入论坛根文档nginx.conf里边root指定的那个查看连数据库相关的脚本有好几个呢其中一个 config_global.php 部分内容为.............部分省略....................$_config array();// ---------------------------- CONFIG DB ----------------------------- //$_config[db][1][dbhost] 172.16.28.94;$_config[db][1][dbuser] bbs_formyz_net;$_config[db][1][dbpw] 5O333EvbY;$_config[db][1][dbcharset] gbk;$_config[db][1][pconnect] 0;$_config[db][1][dbname] bbs_formyz_net;$_config[db][1][tablepre] pre_;$_config[db][common][slave_except_table] ;$_config[db][slave] ;..................................余下省略........................要解决问题有两个办法1跟程序员协作重新对每一个帐号授权grant all ...;2在系统上再配置一个 172.16.28.94的ip地址。搞几天时间了大家都很累因此为了省事我自己做主在系统的另一个空闲网卡配置了上述私有ip地址。陪完重启网络服务论坛可以打开可以登录了。经过多人多测测试确认没问题以后正式做域名解析到新的服务器ip。还有些工作需要继续完善包括同步这几天的新数据、开启新的数据备份等。论坛数据用rysnc -e ssh -p 20002 -avz src dist同步数据库稍微麻烦一点需要临时把论坛停一会启用主从同步功能。由于源站用innobackup导出数据时已经记录了主从同步需要的信息xtrabackup_info因此同步过程就不需要再执行费时的导出操作只需按偏移量执行同步就行。more xtrabackup_info uuid 188600e0-33cc-11e8-986b-90b11c180978name tool_name innobackupextool_command --defaults-file/etc/my.cnf --userroot --password... /data/databk/db_backtool_version 2.3.10ibbackup_version 2.3.10server_version 5.5.29-logstart_time 2018-03-30 11:10:53end_time 2018-03-30 11:40:31lock_time 0binlog_pos filename mysql-bin.001258, position 571444300innodb_from_lsn 0innodb_to_lsn 79320170996partial Nincremental Nformat filecompact Ncompressed Nencrypted N数据库主从同步完成以后把slave提升为主。似乎写得太长了数据库备份部分就不再写了。如果不想看文字猛戳此处看视频临场感更强。