MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大致有3个步骤 1)主将更改操作记录到binlog里 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里 3)从根据relaylog里面的sql语句按顺序执行
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
准备两台机器,都安装mysql,详情看第三十五篇。安装后主从两台机器都启动
主上的IP:192.168.118.133
修改vim /etc/my.cnf 增加server-id=133和log_bin=xie1
修改完配置文件后,启动或者重启mysqld服务: /etc/init.d/mysqld restart 重启之后会出现两个新的文件,xie1.index和xie1.000001,index是索引文件,另一个是日志文件,这两个是实现主从的根本
把mysql库备份并恢复成xie库,作为测试数据 备份mysql库: mysqldump -uroot -p111111 mysql > /tmp/mysql.sql 创建数据库xie: mysql -uroot -p111111 -e “create database xie” 把备份数据恢复成xie库: mysql -uroot -p111111 xie < /tmp/mysql.sql
创建用作主从同步数据的用户,下面的IP 136是从的IP: grant replication slave on . to ‘repl’@’192.168.118.136’ identified by ‘111111’;·
把表锁住,不要再写入数据,暂时写到这: flush tables with read lock;
show master status; 这里的Position的数字下面的master_log_pos会用到
把主上的mysql中的库备份,到时候同步到从上
主上的IP:192.168.118.136
修改vim /etc/my.cnf 配置server-id=136,要求和主不一样,从上不用log_bin这个二进制日志文件
修改完配置文件后,启动或者重启mysqld服务 /etc/init.d/mysqld restart
把主上的备份的数据同步到从上,输入主上的root密码: scp 192.168.118.133:/tmp/*sql /tmp/
然后在从上数据库中创建对应的数据库,如上面我们同步过来的是zrlog和mysql,所以我们在在mysql中创建zrlog和mysql数据库。然后使用命令:mysql -uroot -p111111 zrlog < /tmp/zrlog.sql 把相关的数据库备份同步,要与主上的数据库一样,除了test和performance_schema数据库,因为这两个是默认的。
stop slave;
实现主从关键的一步: change master to master_host=’192.168.118.133’, master_user=’repl’, master_password=’111111’, master_log_file=’xie1.000001’, master_log_pos=658961;
start slave;
可以查看是否主从配置成功: show slave status\G; 查看下列两个是否都为YES: Slave_IO_Running: Yes Slave_SQL_Running: Yes 还需关注 Seconds_Behind_Master: 0 //为主从延迟的时间 Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error:
下列这些参数可以在主或者从上配置,在my.cnf里配置: 主服务器上 binlog-do-db= //仅同步指定的库 binlog-ignore-db= //忽略指定库 从服务器上 replicate_do_db= replicate_ignore_db= replicate_do_table= replicate_ignore_table= replicate_wild_do_table= //如aming.%, 支持通配符% replicate_wild_ignore_table=
还要到主上执行让表恢复写操作: unlock tables;
进入主上数据库: mysql -uroot -p111111;
查看user表有几行: select count(*) from user;
清空user表: truncate table db;
到从上数据库中查看user表,会发现user表已同步清空: select count(*) from user;
主上继续删除user表: drop table user;
从上查看user表,发现没有了user表
有的遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。 https://www.2cto.com/database/201412/364479.html