mysql 主从实现
主库:192.168.1.19
从库:192.168.1.20
开启db_test单库复制
常见问题
参考文档
主配置
- 以mysql root用户登录,用下面sql创建专门用于主从复制的mysql用户repl,并授权给从库20,密码是mysql
grant replication slave on *.* to 'repl'@'192.168.1.19' identified by 'mysql';
flush privileges;
- 再修改mysql配置文件,开启主库binlog输出
cd /opt/svr/mariadb5/etc
vi my.cnf
打开binlog某些配置项,即开启主库的写binlog配置,调整过的参数如下:
log-bin=/opt/dbdat/mariadb5_data3306/log/mysql-bin #binlog存放路径
log-bin-index=/opt/dbdat/mariadb5_data3306/log/mysql-bin.index
binlog-do-db = db_test #只开启db_test库的复制,其他库不复制
binlog-format=row #行模式复制
- 保存并重启mysql,查看下面目录已生成binlog文件:
/opt/dbdat/mariadb5_data3306/log/mysql-bin
mysql-bin.000001 mysql-bin.index
- 也可以通过下面sql查询主库复制状态
show master status;
从配置
-
连接主库
通过下面sql连接主库,注意其中的用户密码,以及binlog文件名、读binlog的位置(可通过上面show master status;sql查询master最新位置)
执行sql:change master to master_host='192.168.1.19', master_user='repl', master_password='mysql', master_log_file='mysql-bin.000001', master_log_pos=0;
-
开启slave复制
执行sql: slave start
- 查看slave状态
执行sql:show slave status \G;
- 查看slave配置参数
执行sql:show variables like "%slave%";
常见问题
- slave不稳定,容易失效,经常要手工启动
测试过程中,需要先执行下面sql连接主库
slave stop;
change master to master_log_file='mysql-bin.000005', master_log_pos=83773;
slave start; - 发现下面一些情况需要手工启动slave
在主库、备库drop某些表
当主库有某张表,但从库没有,通过java插入、查询该表时,也会造成slave停止
当master binlog postion与slave 读取的位置不一致时,要重新按照新的位置连接master,并重启slave - 参考文档
- http://www.examw.com/linux/all/186202/index-3.html
- http://blog.longwin.com.tw/2008/12/mysql-replication-slave-ignore-error-msg-2008/
- http://shanchao7932297.blog.163.com/blog/static/13636242011284192652/
- http://os.51cto.com/art/201311/418982.htm