这几天自己创建了一个mysql的辅库,虽然过程不难,但是还是遇到了一些问题。
正常步骤如下:
1、辅库开始同步时,内容一定要喝主库相同。我是用的直接拷贝数据目录的办法,后来看书上的讲解,使用mysqldump也可以做到这一点。
2、修改辅库的配置文件,使用新拷贝过来的数据,同时修改server-id,不能和主库相同。
3、要在主库上对辅库进行授权。
grant replication slave on *.* to slaveuser@192.168.1.100 identified by 'slavepwd';
flushi privileges;
4、在主库执行 show master status; 记录主库的执行点,作为辅库创建同步的参数。
CHANGE MASTER TO MASTER_HOST='192.168.1.99', MASTER_USER='slaveuser',MASTER_PASSWORD='slavepwd',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=98, MASTER_CONNECT_RETRY=10;
Start slave;
本来过程就是这样,但是我还是犯了一个错误,在主库数据库中,有使用innerdb的表。
第一次错误:
在my.cnf 中,有一个datadir选项,设置数据文件的位置。
我修改了datadir,以为万事大吉了,结果发现辅库启动后发现数据表不同,原来是innerdb有单独的数据目录“innodb_data_home_dir”,我没有做对应的修改,结果出错。
第二次错误:
同步创建好之后,正常运行了一段时间,但是运行一段时间之后,有一条插入语句同步出错,报告错误是数据表损坏。
我又检查了一下cnf文件的配置,发现还有一项“innodb_data_file_path”,指定的是innerdb数据文件的分块大小,如果这个文件不一致的话,我从主库拷贝过来的innerdb数据文件是有问题的,导致了数据表损坏的问题。