高性能mysql主存架构

MySQL ReplicationMaster与Slave基本原理及配置)mysql

主从mysql工做原理:
1:过程:
(1)Mysql的复制(replication)是一个异步的复制,从一个Mysql节点复制到另外一个Mysql节点。实现整个复制操做主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程)另一个进程在 Master(IO进程)上。
(2)要实施复制,首先必须打开Master端的binary log功能,不然没法实现。由于整个复制过程实际上就是Slave从Master端获取该日志而后再在本身身上彻底顺序的执行日志中所记录的各类操做。
2:复制的基本过程以下:
(1)Slave上面的IO进程链接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)以后的日志内容;
(2)Master接收到来自Slave的IO进程的请求后,经过负责复制的IO进程根据请求信息读取制定日志指定位置以后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息以外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
(3)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候可以清楚的高速Master“我须要从某个bin-log的哪一个位置开始日后的日志内容,请发给我”;
(4)Slave的Sql进程检测到relay-log中新增长了内容后,会立刻解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
3:主从结论
(1)主从间的数据库不是实时同步,就算网络链接正常,也存在瞬间,主从数据不一致。 
(2)若是主从的网络断开,从会在网络正常后,批量同步。 
(3)若是对从进行修改数据,那么极可能从在执行主的bin-log时出现错误而中止同步,这个是很危险的操做。因此通常状况下,很是当心的修改从上的数据。 
(4)还有一个mysql配置是双主,互为主从配置,只要双方的修改不冲突,能够工做良好。 
(5)若是须要多主的话,能够用环形配置,这样任意一个节点的修改均可以同步到全部节点。
4:搭建mysql主从服务器
(1)实验环境
操做系统:Red Hat Enterprise Linux Server release 6.4
数据库版本: 5.6.21
(2)主机地址:
master:192.168.10.130
slave:192.168.10.120
(3)安装数据mysql数据库
略
(4)配置master的my.cnf文件
[mysqld] 
log_bin = mysql-bin                #开启binlog日志
basedir = /usr/local/mysql         #指定mysql的安装目录
datadir = /data/mysql              #指定mysql数据库的数据存放位置
port = 3306                        #指定端口,默认是3306,若是一个主机有两个数据库需指定不一样端口
server_id = 1                      #指定server-id,必须与slave端的server-id不一样
bind-address = 0.0.0.0             #默认是127.0.0.1,更改成0.0.0.0,不然Slave将没法连接到 Master
expire_logs_days = 10              #终止日志的时间,以天为单位,默认是30天
max_binlog_size = 100M             #存放日志最大容量
sync-binlog=1                      #容许日志同步
(5)重启mysql服务
[root@localhost ~]# service mysqld restart
(6)本地登陆mysql数据库,向slave受权并查看当前使用的binlog日志与偏移量
mysql> grant replication client,replication slave on *.* to 'repluser'@'192.168.10.120' identified by '123456';
语意:容许用户repluser以密码123456在192.168.10.120主机,登录本机数据库同步数据;
(7)查看master状态
mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000015             #binlog日志
Position: 211                      #偏移量
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:  
No query specified
错误显示:
mysql>show master status;
Empty set (0.02 sec)
查询若是出现以上提示表示配置有问题;
(8)配置slave服务器my.cnf文件
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
server_id = 2                      #指定server-id,必须与master端的server-id不一样
sync-binlog=1                      #容许日志同步
read-only=1                        #设置只读
(9)重启mysql服务
[root@localhost ~]# service mysqld restart
(10)本地登陆mysql数据库,指定从服务器的主服务器并开启slave功能
执行如下操做必须关闭slave功能
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to
 -> master_host='192.168.10.130',        #指定主服务器地址
 -> master_port=3306,                    #指定端口,默认是3306,不须要指定
 -> master_user='repluser',              #指定同步时使用的用户名
 -> master_password='123456',            #指定同步用户的密码
 -> master_log_file='mysql-bin.000015',  #指定当前的主服务器使用的binlog日志
 -> master_log_pos=120;                   #指定当前主服务器上的位偏移量
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
(11)查看slave是否正常工做
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.130
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 120
               Relay_Log_File: localhost-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
(12)测试
在master建立wql数据
mysql> create database wql;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| wql                |
+--------------------+
6 rows in set (0.00 sec)
在slave数据查看是否有该数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wql                |
+--------------------+
5 rows in set (0.00 sec)

 Mysql主从同步搭建完成且能够正常工做,但其中有几点须要注意:sql

(1)设置slave服务器时在指定其主服务器时要在每一个项目后面加逗号分隔
(2)如需更改slave服务器的主服务器的设置须要先中止slave服务,而后再更改,使用命令stop slave能够中止slave服务
(3)只有Slave_IO_Running与Slave_SQL_Running两个进程的状态全为Yse时才代表slave服务正常工做,不然都表示其工做异常。
Slave_IO_Running进程状态为NO的缘由:
(1)链接不上主数据库服务器(物理线路,安全设置问题,受权问题)
(2)当前binlog日志名和pos点和主服务器的不一致
Slave_SQL_Running进程状态为NO的缘由:从服务器本机没有主数据库上的库和表或者表结构不一致。
13:主从复制如何提升可靠性

(1)主从单向复制,从服务器只是实时的保存了主服务器的一个副本。当主服务器发生故障时,能够切换到从服务器继续作查询,但不能更新。数据库

(2)若是采用双向复制,即两台mysql服务器即做为主服务器,又做为从服务器。那么二者均可以执行更新操做并能实现负载均衡,当一方出现故障时,另外一方不受影响。可是,除非能保证任何更新操做顺序都是安全的,不然双向复制会致使失败。安全

但愿渎者多提意见,
联系方式QQ:1486483698
QQ交流群:431392633

相关文章
相关标签/搜索