今天在做mysql的主从同步的时候碰到了一些问题,在这里整理一下。
首先趁着五一假期,主库停机,复制data至从库(时间比较长)。
1、配置主库,主要是my.ini增加如下选项:
# Binary Logging.
# log-bin
log-bin="D:/mysql/mysql/log/mysql-bin/"
# 使binlog在每N次binlog写入后与硬盘 同步
sync-binlog=1
# 1天时间自动清理二进制日志
expire_logs_days=1
# 需要同步的数据库
binlog-do-db=database1
binlog-do-db=database2
binlog-do-db=database3
# 不需要同步的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=database5
binlog-ignore-db=database6
# Error Logging.
log-error="data.err"
# Server Id,每个库都必须独立的分配id.
server-id=2
port=6666
从库配置:
replicate_wild_do_table=database1.%
replicate_wild_do_table=database2.%
replicate_wild_do_table=database3.%
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=database5.%
replicate_wild_ignore_table=database6.%
# 二进制日志自动删除的天数
expire_logs_days=1
# Server Id.
server-id=5
port=6667
配置文件的选项如上,其余则须通过命令行的形式来进行…,(抱怨:oracle就是让mysql越来越难用)
接下来时命令行的内容:
主库:
#进入到mysql的bin目录下,执行
#重启主数据库,然后在主数据库中建立一个备份账户
mysql -h localhost -u root -p
输入密码
进入mysql
mysql>show databases;
mysql>grant replication slave on *.* to 'slave_username'@'192.168.1.12' identified by 'slave_password' ;
mysql>flush privileges;
#显示主服务器的状态信息,并且找到File 和 Position 的值记录下来;
mysql>show master status \G;
#记下File 和 Position,从库配置要用
从库:
#进入到mysql的bin目录下,执行
#重启从数据库,设置登录主数据库的账号和密码等信息,然后启动slave
mysql>change master to master_host='192.168.1.2',master_user='slave_username',master_password='slave_password', master_log_file='.000001',master_log_pos=0;
mysql>start slave;
#此处加\G的意思是格式化输出,否则输出乱七八糟,看不清楚
mysql>show slave status \G;
#如果出现: Slave_IO_Running: Yes Slave_SQL_Running: Yes以上两项都为Yes,那说明没问题了
问题汇总:
1.问题:unknown variable ‘master-host=192.168.8.1’
解决办法:Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数,需要在mysql控制台中使用change master to 命令添加相关信息,而且中横杠’-‘改成了下横杠’_’…
2.问题:mysqlbinlog: [ERROR] unknown option ‘–no-beep’
解决办法:命令后添加 –no-defualts选项
3.问题:Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决办法:因为copy的时候讲auto.cnf一起copy过来了,就产生了主库和从库UUID重复的问题,删掉auto.cnf,重新启动
4.问题:Got fatal error 1236 from master when reading data from binary log: ‘binlog truncated in the middle of event; consider out of disk space on master; the first event ” at 120, the last event read from ‘D:\mysql\mysql\log\mysql-bin.000001’ at 123, the last byte read from ‘xxx.000001’ at 139.’, Error_code: 1236
解决办法:在从库重新指向到主库下一个可用的binlog file 并且从binlog file初始化的位置开始,执行mysql命令
#此命令一定不要加文件路径,直接写文件名,否则继续报错
mysql> stop slave;
mysql> change master to master_log_file='.000001',master_log_pos=0;
mysql> start slave;
mysql> show slave status;
5.问题:cann’t connect to mysql server 10060,远程无法访问
解决办法:给用户授权远程登录权限
mysql> grant all privileges on . to ‘username’@’%’ identified by ‘password’ with grant option;
6.问题: The innodb_system data file ‘ibdata1’ must be writable 解决办法:赋予ibdata1写入权限