司主站的程序和数据库在一台服务器上,上面要求把数据单独迁移到一台服务器上运行。,因为mysql 库里没有innodb表,所以迁移起来就比较简单了。
mysql数据库迁移
实现目的:把210的mysql在线转移到217上,从而实现210运行apache+php ,217只运行mysql.都是centos5.3.
一.先搭建217的mysql最好和210 用同一个版本,这样可以减少问题。
[root@localhost htdocs]# cd /home/
[root@localhost home]# tar -zxvf mysql-5.0.40.tar.gz -C /usr/local/src/
[root@localhost home]# cd /usr/local/src/mysql-5.0.40
[root@localhost mysql-5.0.40]# useradd -M -s /sbin/nologin mysql
[root@localhost mysql-5.0.40]# yum -y install libtermcap-devel
[root@localhostmysql-5.0.40]#./configure--prefix=/usr/local/mysql
//这里默认就可以最好可以210参数一样,查看编译后的参数:
cat "/usr/local/mysql/bin/mysqlbug"|grep configure
[root@localhost mysql-5.0.40]# make
[root@localhost mysql-5.0.40]# make install
[root@localhost mysql-5.0.40]# cp support-files/my-medium.cnf /etc/my.cnf
这里最好把210的配置文件拷贝过来最好。
[root@localhost mysql-5.0.40]# /usr/local/mysql/bin/mysql_install_db --user=mysql
加载并且授权。
[root@localhost mysql-5.0.40]# chown -R root:mysql /usr/local/mysql/
[root@localhost mysql-5.0.40]# chown -R mysql /usr/local/mysql/var/
[root@localhost mysql-5.0.40]# echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
[root@localhost mysql-5.0.40]# ldconfig
[root@localhost mysql-5.0.40]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[root@localhost mysql-5.0.40]# ps -e | grep mysql 验证是否成功开启mysql
1664 pts/2 00:00:00 mysqld_safe
1690 pts/2 00:00:00 mysqld
[root@localhost mysql-5.0.40]# netstat -ntulp | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1690/mysqld
如果一台跑多个mysql建议不要使用下面方法:
[root@localhost mysql-5.0.40]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.0.40]# chmod +x /etc/init.d/mysqld
[root@localhost mysql-5.0.40]# chkconfig --add mysqld
[root@localhost mysql-5.0.40]# chkconfig mysqld on
[root@localhost mysql-5.0.40]# export PATH=$PATH:/usr/local/mysql/bin/
[root@localhost mysql-5.0.40]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
[root@localhost mysql-5.0.40]# mysqladmin -u root password 123456 //修改mysql密码
也可以不设置,一会要覆盖数据。
[root@localhost mysql-5.0.40]# mysql -u root -p
Enter password: (输入123456密码)
二.测试mysql成功开始迁移数据库。
1.先检查下210的所以数据库
2.检查用户:
3.开始迁移,把217的mysql服务停了。
4.我们要先把mysql库迁移过去测试下是否成功。
在210 数据库:
use mysql;
mysqldump -u root-p mysql> mysql.sql
然后拷贝到217的目录下
Mysql > use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql> use mysql;
mysql>source /home/houzc/mysql.sql;
也可以:
mysqldump的 用- h oldhost计算机 - ü oldusername - poldpassword olddbname | MySQL的 用- h newhost计算机 - ü newusername - pnewpassword newdbname
(在覆盖mysql库的最好时候把217的备份下)
为什么不直接tar 包过去 然后复制 /usr/local/mysql/var/ 目录下,这样服务启动会失败,因为mysql 库里面有innodb表 ,这种表不支持直接拷贝目录,还可能有其他原因。
Mysql库覆盖完成后我们重启服务器看是否成功。
5.下面接着迁移,因为在线 把库的插入权限全部关闭,不关闭会丢失这段时间的数据,要是数据库非常庞大,建议最好关闭插入权限。
在210 :
#cd /usr/local/mysql/
# tar -czvf varmysql.tar.gz var/
因为我的服务器不能使用root用户scp。
cp varmysql.tar.gz /home/houzc
scp -P 2000 /home/houzc/varmysql.tar.gz houzc@*.*.*.217:/home/houzc/
在217:
cd /home/houzc
tar -zxvf varmysql.tar.gz -c /usr/local/mysql/var
把所有的数据覆盖一下 ,然后启动服务,能起来就成功了。
因为myisam 表支持直接拷贝。
6.最后修改连接的php程序使所有的用户连接新的数据,
在210上
#vim/www/cms/__myadmin__/config.inc.php
本地连接的全连接的新的服务器,原来远程连接的没变。
在查看库有少没,
Show databases;
自己在测试下表成功不。