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

0 0
原创粉丝点击