且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

mysql主从和mysql主主和半同步复制

更新时间:2022-08-13 17:22:59

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
一、准备(主从都需要配置):
    yum -y install mysql mysql-server       #安装mysql
  yum -y install ntpdate           #安装时间同步
  echo '*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root   #配置网络时间同步
  service mysqld start          #启动服务
  chkconfig --add mysqld            #添加为系统服务
  chkconfig  mysqld on         #开启默认运行级别
     
     
 
二、主服务器配置:主配置文件默认为:/etc/my.cnf
    [mysqld]
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  symbolic-links=0
  log-bin=master-bin          #开启二进制日志文件
  server-id=1             #设置服务器id,保证全局唯一
  sync-binlog=1            #全局唯一的server-id
  innodb-flush-logs-at-trx-commit=1           
  innodb-support-xa=1
         
 
  service mysqld restart    #重启动服务
 
  mysql> show global variables like '%server%';      #数据库id
  mysql> show master logs;      #查看数据库二进制日志
  mysql> show master status;    #查看主服务器状态,记住二进制日志名,配置从服务器会用
  mysql> grant replication slave,replication client on *.* to  'copy'@'192.168.0.50' identified by '123.com';
      #授权192.168.0.50主机上的copy用户对所有库有复制权限
  mysql> select Host,User,Password from mysql.user;    #查看用户
         
     
     
三、从服务器配置:
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    symbolic-links=0
    relay-log=slave-log     #启用中继日志
    server-id=10        #服务器id,全局唯一
    read-only=1         #将服务器设置为只读模式(对拥有root权限的用户无效)
         
    service mysqld restart            #重启动服务
 
    mysql> change master to master_host='192.168.0.10',master_user='copy',
           master_password='123.com',master_log_file='master-bin.000001',master_log_pos=590;
    master_host                #主服务器地址
    master_user                #拥有复制权限的用户
    master_password            #密码
    master_log_file            #从哪个二进制日志开始复制
    master_log_pos             #从二进制日志的什么位置开始复制
             
    mysql> start slave;        #开启从服务器
    mysql> show slave status\G;   #查看从服务器状态
     
     
四、验证主从:
    主服务器:
        mysql> create database db_test;   #创建数据库
         
    从服务器:
    mysql> show databases;         #查看服务器是否同步
 
     
 
     
五、主主复制
    服务器A:
        [mysqld]                #添加内容
    log-bin=master-bin          #启用二进制日志
    relay-log=slave-log         #启用中继日志
    server-id=1             #服务器id,全局唯一
    auto-increment-offset=1         #自增列起始
    auto-increment-increment=2      #自增列一次步进(例:1,3,5,7,9...)
         
    mysql> grant replication slave,replication client on *.* to  'copy'@'192.168.0.50' identified by '123.com';
    mysql> change master to master_host='192.168.0.50',master_user='copy',
          master_password='123.com',master_log_file='master-bin.000001',master_log_pos=106;
     
    mysql> start slave;   
    mysql> show slave status\G;  
                 
             
    服务器B:              
        [mysqld]                #添加内容
        log-bin=master-bin
    relay-log=slave-log
    server-id=10
    auto-increment-offset=2         #自增列起始
    auto-increment-increment=2      #自增列一次步进(例:2,4,6,8,10...)
 
        mysql> grant replication slave,replication client on *.* to  'copy'@'192.168.0.10' identified by '123.com'
    mysql> change master to master_host='192.168.0.10',master_user='copy',
        master_password='123.com',master_log_file='master-bin.000003',master_log_pos=106;
     
    mysql> start slave;   
    mysql> show slave status\G;  
     
     
     
     
六、半同步复制
    要想使用半同步复制,必须满足以下几个条件:
        1. MySQL 5.5及以上版本
    2. 变量have_dynamic_loading为YES
    3. 异步复制已经存在
         
    主:
    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';     #安装插件
    mysql> show plugins;           #查看插件是否安装成功
    mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1#启用半同步
    mysql> show status like 'Rpl_semi_sync_master_status';   #查看是否在运行
         
    从:
    mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';       #安装插件
    mysql> show plugins;
    mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;      #启用半同步
    mysql> STOP SLAVE          #关闭复制线程
    mysql> START SLAVE            #开启复制线程
    mysql> show status like 'Rpl_semi_sync_slave_status';    #查看是否在运行
     
     
    mysql> show variables like '%Rpl%';      #查看和半同步相关的服务器变量
        rpl_semi_sync_master_enabled        #是否启用半同步
        rpl_semi_sync_master_timeout        #等待超时时间
        rpl_semi_sync_master_wait_for_slave_count
            #需要等待多少个slave应答,才能返回给客户端
     
     
    mysql> show status like '%Rpl_semi%';        #半同步状态
        Rpl_semi_sync_master_clients            #当前半同步复制从的个数
     
     
     
七、和复制相关的文件
    从节点:
        master.info:用于保存slave连接至master时的相关信息(账号,密码,服务器地址,复制的二进制文件等)
    relay-log.info:保存当前slave节点上已经复制到的二进制文件位置,和relay-log的位置 
 
     
 
    


本文转自  红尘世间  51CTO博客,原文链接:http://blog.51cto.com/hongchen99/1936473