今天把Mysql数据库从服务器A迁移到了服务器B。把过程和遇到的问题记录一下,备忘。
说明:
用的直接拷贝迁移数据文件的方式。在Ubuntu 16.04上操作。以user数据库迁移为例。
1.要先确认目标服务器上的mysql和源服务器上的版本
目标服务器版本最好大于源服务器上的,一致最好。确保源服务器上支持的特性,目标服务器上都支持。假如目标服务器mysql服务器版本号小于源服务器,特别注意下数据库引擎目标服务器是否支持。
2.在源数据库上查询数据文件目录地址
mysql> show variables like '%dir%';
+-----------------------------------------+----------------------------+
| Variable_name | Value |
+-----------------------------------------+----------------------------+
| basedir | /usr |
| binlog_direct_non_transactional_updates | OFF |
| character_sets_dir | /usr/share/mysql/charsets/ |
| datadir | /var/lib/mysql/ |
| ignore_db_dirs | |
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| innodb_max_dirty_pages_pct | 75 |
| innodb_max_dirty_pages_pct_lwm | 0 |
| innodb_undo_directory | . |
| lc_messages_dir | /usr/share/mysql/ |
| plugin_dir | /usr/lib/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+-----------------------------------------+----------------------------+
其中datadir项中的值就是数据目录地址。要迁移的数据库文件,就在此目录下同名目录。例如我们要迁移user数据库,那么在此目录下,就存在user目录,这就是数据库对应的数据。
3.暂停目标服务器和源服务器上mysql服务
sudo service mysql stop
4.将数据库文件夹拷贝到目标服务器上
可以使用FTP,将数据库目录拷贝到目标服务器的对应数据目录。数据目录查询方法同步骤一。一般默认为/var/lib/mysql/。
5.修改数据库目录的所有者
将拷贝的数据库目录,修改所有者为mysql
sudo chown -R mysql:mysql user
6.开启mysql服务
sudo service mysql start
注意:
若写数据库操作时报:Table is read only,查看数据库目录的所有者是否修改了mysql。若还不行,试试:
mysqladmin -u root -p flush-tables