mysql5.7.9主从同步配置
2015-12-10 11:29
549 查看
mysql5.7.9主从同步配置
mysql579主从同步配置环境
参考
配置
master配置
slave配置
master创建复制用户
获取master日志坐标
创建master数据快照
创建salve复制
测试
添加新的slave
说明
环境
CentOS 6.6 X86_64Mysql 5.7.9
参考
mysql复制官方文档配置
master配置
在主服务器的my.cnf配置文件中,增加[mysqld] log-bin=mysql-bin server-id=1
说明:
1. log-bin:开启二进制日志,该日志是在事务提交时写日志文件的。默认大小是1G,后面加001,002这样的后缀顺加。
2. server-id,唯一标识主机,mysql主从每个mysql实例配置都不一样就行。这个值默认是0,如果是0,主服务器拒绝任何从服务器的连接。
3. innodb_flush_log_at_trx_commit=1 and sync_binlog=1 这两个参数控制着二进制日志刷新速度,后面再写文章单独分析。
4. binlog_format=ROW控制着日志格式。
slave配置
在从服务器的my.cnf配置文件中,增加[mysqld] server-id=2
说明:
server-id唯一就行。如果默认为0,则拒绝连接主服务器。
master创建复制用户
在master上,root登录mysql,执行CREATE USER 'repl'@'192.168.31.%' IDENTIFIED BY 'slavepass'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.31.%';
说明:
简单的创建用户,授予REPLICATION SLAVE权限。访问限制,密码,用户名等,根据实际情况自行设定,后面注意保持一致。
获取master日志坐标
连接mysql,执行 FLUSH TABLES WITH READ LOCK; 再开一个会话,连接mysql,执行 SHOW MASTER STATUS; 会有类似输出 +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 记住坐标 mysql-bin.000004 154
说明
1.要开另外的一个连接执行SHOW MASTER STATUS,是由于假如断开第一个执行FLUSH TABLES的会话,会自动释放读锁,还是小心点,重开会话吧。
2.第二 个会话输出,有可能为空,如果是全新安装,还没有产生二进制日志,你还是先随便执行点修改操作,后面就有了,一般的select是不记录二进制日志的。
创建master数据快照
mysqldump --all-databases --master-data -uroot -p > /tmp/dbdump.db
说明:
1.–master-data此选项会在备份中添加 CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000004’, MASTER_LOG_POS=154;
2.当然还有冷备,关master服务器,copy data所有文件,删除auto.cnf,复制到slave就可以了。具体自己去试试吧。
创建salve复制
1.因为我们已经取到master上一致性的快速,可以解锁了,在master上执行 UNLOCK TABLES; 2.上传master是快照备份dbdump.db到slave的/tmp下 3.salve的my.cnf配置mysqld块中增加 skip-slave-start=true read_only=ON relay-log=relay-bin relay-log-index=relay-bin.index 说明:skip-slave-start=true,跳过slave线程启动 其他的中断日志配置,就方便复制到其他salve,因为默认是主机名开关的文件。 read_only,我开启的只读模式 4.启动slave 此时进入mysql,show processlist;是看不到复制线程的,show slave status \G显示也是空。 6.设置master信息 CHANGE MASTER TO MASTER_HOST='192.168.31.84', MASTER_USER='repl', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154; 最后的MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154可以省略,因为后面的倒入数据中如果有CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154; 这样的语句。如果是手工冷备份过来的,则不能省略。 为了方便,统一都写上的,哪种情况都合适,省得自己都晕了,就当上面那段话是空气,忘记吧。 5.倒入数据到slave bin/mysql -uroot -p < /tmp/dbdump.db 6.查看slave状态 在slave中执行 mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Master_Host: 192.168.31.84 Master_User: repl Master_Port: 13306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 154 Relay_Log_File: relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: No Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: ... 我们看到 Slave_IO_Running: No Slave_SQL_Running: No 复制线程还没有启动 7.手工启动slave复制线程 start slave 8.再次查看下slave状态 show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.31.84 Master_User: repl Master_Port: 13306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 154 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: 这回都YES,配置完成,顺便看看进程 mysql> show processlist; +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+ | 2 | root | localhost | NULL | Query | 0 | starting | show processlist | | 5 | system user | | NULL | Connect | 89 | Waiting for master to send event | NULL | | 6 | system user | | NULL | Connect | 89 | Slave has read all relay log; waiting for more updates | NULL | 多了两个复制的进程 9.最后,把slave的my.cnf中之前增加的skip-slave-start=true去掉,前面加一个#注释掉就行了。最后重启下slave服务,不重启也行。
测试
master上: create database foodsafe; create table t1 (id int,name varchar(200),createtime timestamp,key(id)); insert into t1 values (1,'aa',now()); insert into t1 values (3,'bb',now()); select * from t1; slave上: use foodsafe; select * from t1; 观察两边结果是否一致。
添加新的slave
跟添加第一台slave基本一致,改下server-id,不冲突。自己试验下吧。说明
相关参数,ip,端口等,请根据实据情况调整。相关文章推荐
- MySQL数据表中内容大小写区分的设置
- 10008---MySql 数据导入导出
- MySql中表的字段是JSON字符串
- MySQL数据库update更新子查询[Err] 1093 - You can't specify target table 'text' for update in FROM clause
- MySQL 分区表脚本
- 如何在windows64位的系统上安装,配置mysql?
- 查看mysql库大小,表大小,索引大小
- MySQL5.7 初使用
- mysql导入.sql错误
- mysql 慢查询分析 第一篇
- ubuntu server14.04 lnmp1.2 mysql添加innodb
- Mysql删除重复数据
- cmd进入控制Mysql&出现乱码的问题
- cmd进入控制Mysql&出现乱码的问题
- cmd进入控制Mysql&出现乱码的问题
- MySQL线程池(THREAD POOL)的原理
- Mysql通过IP连接授权
- Mysql Order By 技巧
- MySQL的SSL加密连接与性能开销
- cmd进入控制Mysql&出现乱码的问题