mysql主从基础知识
来源:互联网 发布:java 字符串反转 编辑:程序博客网 时间:2024/06/13 01:42
mysql主从复制
mysql日志
二进制日志
数据目录 mysql.bin.XXXXXXXXXX
滚动:达到最大上限。flush logs;服务器重启
mysql>PURGE
二进制日志的格式:
statement 不建议使用
row 一般使用
mixed
mysql-bin.index 二进制日志文件的索引文件 mysql >SHOW MASTER STATUS; mysql >SHOW BINARY LOGS; mysql >SHOW BINLOG EVENTS IN "file"; event timestamp position,offset,operstion server_id 即时点还原,用二进制日志恢复的数据和原始数据会有可能不一样。因为二进制记录日志的时候,有些事物执行的时候是并行的,所以会导致恢复的时候会有不一样。 二进制日志恢复数据很慢。 mysql的隔离级别: READ-UNCOMMITTED READ-COMMITTED REPEATABLE-READ + STATMENT 很有可能导致二进制日志恢复的和源数据不一样。建议raw格式 SERIAILZABLE
主从模型:
master数据库执行语句,会保存一个事件。记录本地二进制文集
把二进制日志产生的事件发送到另一台数据库slave服务器上,
先保存到relay log 中继日志。
另一台服务器根据这个日志事件,执行写操作。
从的服务器会慢一点。如果主服务器上如果写操作太快的话,从数据库同步会慢一点。
默认要异步。同步会导致瓶颈。
从数据库上不应该允许写操作。只让它能读就行了。 可以一主多从。 只保证一个节点,同步到了信息。其他的不管。 从服务器和主服务器有可能不在一个机房里。 从数据库服务器就不需要记录二进制日志文件了。没必要。 但是一个从可能是从的从。所以有的情况下也有需要。多级复制。 复制的作用 辅助实现备份。 高可用 异地容灾 最重要的就是分摊负载了。。scale out。 读 从服务器 写 主服务器 不能在一个服务器上不能同时读写。
多个从的时候,负载均衡器,找一个mysql代理,能将mysql语句读写分离。rw-splitting
可以把多个从mysql做一个lvs。
查询到的先存到memcache缓存中,再一次查的时候先查memcache。再查从服务器。
主向从服务器,每一个都要发一次二进制文件。会导致大量IO。
单独拿出来一个从,负载给其他从发送二进制文件。这个从,只负责发送。本地不需要保存。要提供二进制文件。要有中继日志。但是不写又没有二进制文件。但是写了又浪费io。
block hole 。写到block hole里。不会保存。但是会产生二进制文件。
简化结构:
master slave
主从结构中 不使用mysql代理,如何让主的负责写,从的负责读。
比如让php程序(论坛)自己寻找主从。比较麻烦。
双主模型。但并不建议使用。 能分担读操作。但是对写操作无法减轻。
如果写实在是太大太多
分库,分表。
把大数据库拆分。垂直拆分。热分。
水平拆分表。
事物日志错误日志一般查询日志中继日志慢查询日志
一个mater对应n个slave
一从只能属于一个主服务器。
mysql5.6以后复制上 有了gtid。使得复制更加安全。不会产生数据混乱。
引入了多线程复制 multi-thread replication
配置mysql复制的基本步骤
master 1.启用二进制日志 log-bin = mater-bin log-bin-index = master-bin.index 2 选择一个唯一的server-id server-id = {0-2^32} 3创建具有复制权限的用户 REPLICATION SLAVE REPLICATION CLIENTSLAVE 1 启用中继日志 relay-log =relay-log relay-log-index = 2 选择一个唯一的server-id server-id ={0-2^32} 3 连接至主服务器,并开始复制数据: CHANGER MASTER TO MASTER_HOST = '',MASTEER_PORT='',MATER_LOG_FILE='',MASTER_LOG_FILE_POS='' MASTER_USER='',MASTER_PASSWORD='' START SLAVE; mysql的复制线程 主 提供dump线程。 从 io线程 ,io接受保存至中继日志。sql进程读取中继日志。 执行sql。 IO_Thread SQL_tHREAD
具体步骤:
mysql要5.5或者5.6的?
用5.1的做。
修改master配置文件vim /etc/my.cnf
port=3306
log-bin=/var/lib/mysql/mysql-binlog
server-id=1
binlog_do_db=handb
innodb_file_per_table=1
修改slave配置文件
server-id=2
master-host=172.25.254.118
master-user=han
master-password=han
master-port=3306
master-connect-retry=5
replicate-do-db=handb
master:
mysql>grant replication slave,reload,super on . to han@172.25.254.119 identified by ‘han’;
mysql>create database handb;
show master status;
slave
mysql -uhan -phan -h 172.25.254.118
mysql>show slave status;
Slave_IO_Running: Yes
如果同步不成功
主库
slave stop
show master status;
手动同步
mysql>change master to
master_host=”
master_user=
master_password=
master_port=
master_log_file=
master_log_pos=
slave start
跳过异常
slave stop
SET GLOBAL sql_slave_skip_counter =1;
slave start
1 创建主库 从库
2 dump主库数据灌到从库
3 修改主库 从库配置
4 主库grant 从库 start slave
- mysql主从基础知识
- nginx一些基础知识、搭建和mysql主从复制搭建
- MySQL高性能主从复制系列之基础知识部分
- Redis主从复制基础知识
- mysql 主从
- MySQL主从
- MYSQL 主从
- mysql主从
- mysql主从
- mysql主从
- Mysql 主从
- mysql 主从
- Mysql 主从
- mysql主从
- mysql 主从
- Mysql主从
- mysql 主从
- MySQL 主从
- 【JAVA编码专题】UNICODE,GBK,UTF-8区别
- xmlns:android="http://schemas.android.com/apk/res/android的作用
- (hdu step 3.2.5)Humble Numbers(从小到大输出因子只有2,3,,5,7的数)
- Attribute之自定义
- CentOS 6.5/Linux 重启网卡报错 Determining if ip address x.x.x.x is already in use
- mysql主从基础知识
- 【JAVA编码专题】深入分析 Java 中的中文编码问题
- bzoj 1927 星际竞速(拆点费用流)
- linux目录
- C语言的发展历史
- 最大流ISAP+Dinic
- android webview 点击页面输入框导致页面变大问题的解决
- java的System.getProperty()方法可以获取的值
- c++vector用法