当单台 MYSQL 服务器没法知足当前网站流量时的优化方案。须要搭建 mysql 集群技术。node
Mysql 中有一种日志叫作 bin 日志(二进制日志)。这个日志会记录下全部修改了数据库的SQL 语句(insert,update,delete,create/alter/drop table, grant 等等)。
主从复制的原理其实就是把主服务器上的 bin 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。mysql
从节点:linux
主节点:web
**思考:**从节点须要创建二进制日志文件吗?
看状况,若是从节点须要做为其余节点的主节点时,是须要开启二进制日志文件的。这种状况叫作级联复制。若是只是做为从节点,则不须要建立二进制文件。sql
主节点:数据库
从节点:centos
测试环境:
主节点:192.168.0.196
从节点:192.168.0.198
mysql版本:mysql-5.5.17
linux:centos6.5缓存
1:编辑主节点配置文件
2:启用二进制日志文件安全
3:启动mysql服务,并链接mysql
4:查看日志信息
1:)查看二进制日志是否开启
2:)查看主节点二进制日志列表
3:)查看主节点的server id
5:在主节点上建立有复制权限的用户。REPLIACTION SLAVE ,REOPLIATION CLIENT
6:刷新
主服务器配置完成。
注意:确保主服务器的iptables没有阻断3306的访问端口。服务器
7:编辑从节点配置文件
8:开启中继日志
CHANGE MASTER TO MASTER_HOST='192.168.0.196',MASTER_USER='repluser',MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000042',MASTER_LOG_POS=362;
12:查看从节点的状态信息
由于没有启动 从节点的复制线程,IO线程 和 SQL 线程都为NO.
13:启动复制线程
START SLAVE 能够指定线程类型:IO_THREAD ,SQL_THREAD, 若是不指定,则两个都启动。
14:再次查看从节点状态信息
至此,mysql的主----从复制配置完成。
15:测试
1:)在主节点建立数据库,并查看主节点二进制日志信息
2:)在从节点查找二进制日志信息,并查看mydb数据库是否复制成功
从节点要设置某些限定使得它不能进行写操做,才能保证复制当中的数据一致。
1:限制从服务器为只读
在从服务器上设置:
read_only = ON,可是此限制对拥有SUPER权限 的用户均无效。
阻止全部用户:
mysq>FLUSH TABLES WITH READ LOCK;
2:如何保证主从复制时的事物安全?
1:在主节点设置参数
sync_binlog=1: Mysql开启bin-log日志使用bin-log时,默认状况下,并非每次执行写入就与硬盘同步,这样在服务器崩溃时,就可能致使bin-log最后的语句丢失。能够经过这个参数来调节,sync_binlog=N,使执行N次写入后,与硬盘同步。1是最安全的,可是也是最慢的。
若是用到innode 存储引擎:
innodb_flush_logs_at_trx_commit=ON(刷写日志:在事务提交时,要将内存中跟事务相关的数据当即刷写到事务日志中去。)
innodb_support_xa=ON (分布式事务:基于它来作两段式提交功能)
sync_master_info=1:每次给从节点dump一些事件信息以后,主节点的master info 信息会当即同步到磁盘上。让从服务器中的 master_info 及时更新。
2:在每一个slave节点
skip_slave_start =ON (跳过自动启动,使用手动启动。)
relay_log也会在内从中先缓存,而后在同步到relay_log中去,能够使用下面参数使其当即同步。
sync_relay_log =1 ,默认为10000,即每10000次sync_relay_log事件会刷新到磁盘。为0则表示不刷新,交由OS的cache控制。
sync_relay_log_info=1每间隔多少事务刷新relay-log.info,若是是table(innodb)设置无效,每一个事务都会更新
注: 在从节点中 master.info是记录在主节点复制位置的文件。
relylog_info: 本地未来至于主节点的哪个二进制文件中position而且保存文本地哪个中继日志中的哪个postion. 从节点启动时也须要根据relay-log.info定位本地relay-log.