主数据库:IP1
从数据库:IP2
一.配置主数据库
vi /etc/my.cnf
server-id=1
log-bin=mysql-bin 允许mysql使用binlog,同时为主从复制打开了大门
binlog_format=mixed //二进制日志的格式
binlog-do-db=数据库名1(没有这个数据库,启动不会报错)
expire-log-day。binlog过期时间,默认为10天。
- 重启mysql service mysqld restart
- 登录mysql : mysql -u root -p
- 查看状态:mysql> show variables like '%log_bin%';
这里的 File 、Position 是在配置Salve的时候要使用到的.
flush logs; 会多一个最新的bin-log日志
show master status; 查看最后一个bin-log日志的相关信息
reset master; 清空所有的bin-log日志
二.为从库配置用户和权限
mysql> GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
mysql>flush privileges;
GRANT REPLICATION SLAVE 赋予复制权限(grant all指的是授权所有操作权限(增删改查)),*.*指的是所有数据库,slave指的是用户名,123456是密码,%指的是所要授权的远程IP地址。整一句的意思是,创建一个用户slave,密码为123456,然后将此用户授权给远程所有IP可以访问,此用户可以访问主服务器里的所有数据库。
三.配置从库
vi /etc/my.cnf
server-id=105(一般是IP最后一位)
重启mysql
执行:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=308;
参数解释:MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第1步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第1步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
启动同步
start slave;
查看状态
show slave status \G;
主从复制配置好后,如果不关闭slave,即使mysql重启,主从也会生效,不需要再次启动。
问题:
1.IO连接不上
一般是:
- 主库和从库网络不通
- 密码错误
- pos不对
我这边是创建的用户有问题,重新创建就可以了。
2.当时删除从库的表后出现
我们可以明显的发现,我们的sql线程已经挂掉了。
导致这个问题的原因是因为由于数据的不同步,导致我们在执行主从同步的时候出现了执行不了的sql,导致从机事务回滚了,所以sql的进程就被关闭了,常见的这个问题的出现方式:
- 在从机上进行了写操作(非双机热备情况下)。
- slave机器重启,事务回滚。
- 各种原因导致的数据不同步。
解决1:
- mysql> stop slave;
- mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
- mysql> start slave;
解决2:
停止从机服务:stop slave;
然后在主机上查看binlog文件的位置:show master status;
重新开始同步
2.有个问题,如果是本地win系统上的mysql复制过来的数据库和表,名称会默认全小写,win不支持lower_case_table_names=0的配置。