Перенос сайта с mysql на другую машину .

Была задача перенести сайт с mysql с одной машины на другую. Сайт работал на 4-й версии mysql и php, а будет работать на 5-й. Итак устанавливаем апач, php, suphp, mysql:

# cd /usr/ ports/www/apache22
# make install clean
# cd /usr/ports/databases/mysql50
# make install clean
# cd /usr/ports/lang/php5
# make install clean
# cd /usr/ports/lang/php5-extensions
# make install clean
# cd /usr/ports/www/suphp
# make install clean

В make.conf прописываем:

.if ${.CURDIR:M*/www/apache22}
WITH_SUEXEC= yes
WITH_SUEXEC_MODULES= yes
SUEXEC_DOCROOT= /home
SUEXEC_LOGFILE= /var/log/httpd/suexec.log
.endif

#PHP_SAPI= cgi
.if ${.CURDIR:M*/www/suphp}
WITH_SETID_MODE= force
WITH_LOGFILE= /var/log/suphp.log
MIN_UID= 1000
MIN_GID= 1000
.endif

.if ${.CURDIR:M*/databases/mysql50-server}
WITH_XCHARSET= all
WITH_CHARSET= cp1251
WITH_COLLATION= cp1251_general_ci
.endif
.if ${.CURDIR:M*/databases/mysql50-client}
WITH_XCHARSET= all
WITH_CHARSET= cp1251
WITH_COLLATION= cp1251_general_ci
.endif

При установке модуля php-extensions в опциях можно выбрать что необходимо использовать. PHP работает в режиме cgi, для этого в апаче необходимо подгрузить модуль suphp. Но лучше использовать модуль апача fast-cgi, он намного быстрее обрабатывает запросы. Ниже приведен кусок конфига апача при использовании suphp (закомментарен) и fast-cgi:

### su_php options ###
#suPHP_Engine on
#AddType application/x-httpd-php .php
#suPHP_AddHandler application/x-httpd-php
#LoadModule suphp_module libexec/apache22/mod_suphp.so

### php_fastcgi options ###
LoadModule fastcgi_module libexec/apache22/mod_fastcgi.so
<IfModule mod_fastcgi.c>
FastCgiConfig -singleThreshold 30 -minProcesses 2 -restart \
-idle-timeout 400 -killInterval 200 -autoUpdate \
-pass-header HTTP_AUTHORIZATION
FastCgiWrapper /usr/local/sbin/suexec
FastCgiIpcDir /var/run/fastcgi
Action application/x-httpd-fastphp /cgi-bin/php-fcgi
AddType application/x-httpd-fastphp .php .php4 .php5
</IfModule>

# user homedirs
<Directory “/home/*/public_html”>
Options MultiViews Indexes Includes IncludesNoExec FollowSymlinks SymLinksIfOwnerMatch
AllowOverride All
Order deny,allow
Allow from all
</Directory>
DirectoryIndex index.php5 index.php index.html index.htm
Include etc/apache22/httpd.vhosts.conf
Include etc/apache22/Includes/*.conf

В /usr/local/etc/apache22/httpd.vhosts.conf прописаны виртуалхосты, первый дефолтный куда будут попадать те, кто вводят ip вместо названия сайта:

NameVirtualHost 1.1.1.1:80

#BEGIN_app-web
<VirtualHost 1.1.1.1:80>
ServerAdmin root@app.domain
ServerName app.domain
ServerAlias *.app.domain app.domain
SuexecUserGroup app-web app-web
# suPHP_UserGroup app-web app-web
DocumentRoot /home/app-web/public_html
ScriptAlias /cgi-bin/ /home/app-web/public_html/cgi-bin/
CustomLog /home/app-web/log/apache.log combined
ErrorLog /home/app-web/log/apache.error
</VirtualHost>
#END_app-web

#BEGIN_user
<VirtualHost 1.1.1.1:80>
ServerAdmin postmaster@domain
DocumentRoot /home/user/public_html
ServerName www.domain
ServerAlias *.domain domain
ScriptAlias /cgi-bin/ /home/user/public_html/cgi-bin/
CustomLog /home/user/log/apache.log combined
ErrorLog /home/user/log/apache.error
SuexecUserGroup user wwwusers
#suPHP_UserGroup user wwwusers
</VirtualHost>
#END_user

Добавляем в rc.conf строчки запуска апача и mysql:

apache22_enable=”YES”
mysql_enable=”YES”
mysql_dbdir=”/home/mysqldb”
mysql_args=”–key_buffer_size=96M –default-character-set=cp1251

Делаем начальные настроки mysql. Создаем пользователя root с паролем test и проверяем его:

# mysqladmin -u root password test
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 183801
Server version: 5.0.51a-log FreeBSD port: mysql-server-5.0.51
mysql>create database test;

Тут мы создали базу данных test, теперь создадим пользователя user c паролем test и дадим ему права на базу test:

# mysql -u root -p
Enter password:
mysql>GRANT ALL PRIVILEGES ON test.* TO user@localhost IDENTIFIED BY ‘test’ WITH GRANT OPTION;

Тут ALL означает все права, можно отдельно через запятую прописать CREATE, SELECT, INSERT, … Выходим из базы и можем проверить пароль mysql -u user -p. Теперь делаем дамп базы :

# mysqldump -u root -p –add-drop-table –add-locks –default-character-set=cp1251 test >
/usr/home/user/dump.sql

Тут указана опция –default-character-set=cp1251, т.к. такая кодировка базы, вместо test можно указать –all-databases, если нужно задампить все базы. Теперь вливаем дамп в новый сервер:

# mysql -u root -p < /home/user/dump.sql

Теперь делаем архив домика и распаковываем его на новом сервере:

# cd /usr/home/user
# tar -zcvpf /root/user.tar.gz public_html
# cd /home/user
# tar -zxvp user.tar.gz

Тут в примерах домик находится в /usr/home на старом сервере и в отдельной выделенной партиции /home на новом сервере. Рестартуем сервисы и проверяем работу сайта, видим что все работает.

Источник информации:
1. http://www.gentoo.org/doc/ru/mysql-howto.xml

© Mau, 2008.