接下来拷贝数据文件时,如果是MyISAM表类型的话,直接拷贝即可;如果是InnoDB表类型的话,一定要先停止MySQL服务再拷贝,否则拷贝文件可能无法使用。把拷贝的数据文件直接复制到从服务器的数据目录。
最后还需要再指定一下日志信息:
mysql> CHANGE MASTER TO
MASTER_HOST="<MASTER_HOST>",
MASTER_USER="<SLAVE_USER>",
MASTER_PASSWORD="<SLAVE_PASSWORD>",
MASTER_LOG_FILE="<FILE>",
MASTER_LOG_POS=<POSITION>;
在主服务器上直接拷贝数据文件虽然很快,但需要锁表或者停止服务,这会影响线上服务。如果先前已经有了从服务器,那么可以用旧的从服务器做母本来克隆新的从服务器:
先在旧的从服务器上查询日志信息:
mysql> SHOW SLAVE STATUS;
我们需要的是其中的Relay_Master_Log_File & Exec_Master_Log_Pos。
然后在旧的从服务器上按照前面的方法得到数据,可以先stop slave,然后拷贝数据并在新的从服务器上还原。
接着在新的从服务器上设置日志信息:
mysql> CHANGE MASTER TO
MASTER_HOST="<MASTER_HOST>",
MASTER_USER="<SLAVE_USER>",
MASTER_PASSWORD="<SLAVE_PASSWORD>",
MASTER_LOG_FILE="<Relay_Master_Log_File>",
MASTER_LOG_POS=<Exec_Master_Log_Pos>;
不管用那个方法,最后记得在从服务器上启动复制,并检查工作是否正常:
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS;
注意:
MariaDB [(none)]> show slave status\G;
显示的Master_Log_File和 Read_Master_Log_Pos 这两个只对应这master
show master status\G;的文件号和位置
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.143
Master_User: info_syncer
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000019
Read_Master_Log_Pos: 1038
总结:万不得一不要在服务还没有停的情况下去停服务器,尤其是数据库,否则会出现意想不到的错误,但是当服务器出现不可解决的问题的时候,一定要果断的去重启,不要犹豫,难免出现更严重的问题,再就是play或者tomcat等等这些服务最好分开跑,以免互相影响。