天天看点

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

<code>一、准备(主从都需要配置):</code>

<code>    </code><code>yum </code><code>-</code><code>y install mysql mysql</code><code>-</code><code>server       </code><code>#安装mysql</code>

<code>  </code><code>yum </code><code>-</code><code>y install ntpdate           </code><code>#安装时间同步</code>

<code>  </code><code>echo </code><code>'*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &amp;&gt;/dev/null'</code> <code>&gt;&gt;</code><code>/</code><code>var</code><code>/</code><code>spool</code><code>/</code><code>cron</code><code>/</code><code>root   </code><code>#配置网络时间同步</code>

<code>  </code><code>service mysqld start          </code><code>#启动服务</code>

<code>  </code><code>chkconfig </code><code>-</code><code>-</code><code>add mysqld            </code><code>#添加为系统服务</code>

<code>  </code><code>chkconfig  mysqld on         </code><code>#开启默认运行级别</code>

<code>    </code> 

<code>二、主服务器配置:主配置文件默认为:</code><code>/</code><code>etc</code><code>/</code><code>my.cnf</code>

<code>    </code><code>[mysqld]</code>

<code>  </code><code>datadir</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code>

<code>  </code><code>socket</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code><code>/</code><code>mysql.sock</code>

<code>  </code><code>user</code><code>=</code><code>mysql</code>

<code>  </code><code>symbolic</code><code>-</code><code>links</code><code>=</code><code>0</code>

<code>  </code><code>log</code><code>-</code><code>bin</code><code>=</code><code>master</code><code>-</code><code>bin</code>          <code>#开启二进制日志文件</code>

<code>  </code><code>server</code><code>-</code><code>id</code><code>=</code><code>1</code>             <code>#设置服务器id,保证全局唯一</code>

<code>  </code><code>sync</code><code>-</code><code>binlog</code><code>=</code><code>1</code>            <code>#全局唯一的server-id</code>

<code>  </code><code>innodb</code><code>-</code><code>flush</code><code>-</code><code>logs</code><code>-</code><code>at</code><code>-</code><code>trx</code><code>-</code><code>commit</code><code>=</code><code>1</code>           

<code>  </code><code>innodb</code><code>-</code><code>support</code><code>-</code><code>xa</code><code>=</code><code>1</code>

<code>        </code> 

<code>  </code><code>service mysqld restart    </code><code>#重启动服务</code>

<code>  </code><code>mysql&gt; show </code><code>global</code> <code>variables like </code><code>'%server%'</code><code>;      </code><code>#数据库id</code>

<code>  </code><code>mysql&gt; show master logs;      </code><code>#查看数据库二进制日志</code>

<code>  </code><code>mysql&gt; show master status;    </code><code>#查看主服务器状态,记住二进制日志名,配置从服务器会用</code>

<code>  </code><code>mysql&gt; grant replication slave,replication client on </code><code>*</code><code>.</code><code>*</code> <code>to  </code><code>'copy'</code><code>@</code><code>'192.168.0.50'</code> <code>identified by </code><code>'123.com'</code><code>;</code>

<code>      </code><code>#授权192.168.0.50主机上的copy用户对所有库有复制权限</code>

<code>  </code><code>mysql&gt; select Host,User,Password </code><code>from</code> <code>mysql.user;    </code><code>#查看用户</code>

<code>三、从服务器配置:</code>

<code>    </code><code>datadir</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code>

<code>    </code><code>socket</code><code>=</code><code>/</code><code>var</code><code>/</code><code>lib</code><code>/</code><code>mysql</code><code>/</code><code>mysql.sock</code>

<code>    </code><code>user</code><code>=</code><code>mysql</code>

<code>    </code><code>symbolic</code><code>-</code><code>links</code><code>=</code><code>0</code>

<code>    </code><code>relay</code><code>-</code><code>log</code><code>=</code><code>slave</code><code>-</code><code>log     </code><code>#启用中继日志</code>

<code>    </code><code>server</code><code>-</code><code>id</code><code>=</code><code>10</code>        <code>#服务器id,全局唯一</code>

<code>    </code><code>read</code><code>-</code><code>only</code><code>=</code><code>1</code>         <code>#将服务器设置为只读模式(对拥有root权限的用户无效)</code>

<code>    </code><code>service mysqld restart            </code><code>#重启动服务</code>

<code>    </code><code>mysql&gt; change master to master_host</code><code>=</code><code>'192.168.0.10'</code><code>,master_user</code><code>=</code><code>'copy'</code><code>,</code>

<code>           </code><code>master_password</code><code>=</code><code>'123.com'</code><code>,master_log_file</code><code>=</code><code>'master-bin.000001'</code><code>,master_log_pos</code><code>=</code><code>590</code><code>;</code>

<code>    </code><code>master_host                </code><code>#主服务器地址</code>

<code>    </code><code>master_user                </code><code>#拥有复制权限的用户</code>

<code>    </code><code>master_password            </code><code>#密码</code>

<code>    </code><code>master_log_file            </code><code>#从哪个二进制日志开始复制</code>

<code>    </code><code>master_log_pos             </code><code>#从二进制日志的什么位置开始复制</code>

<code>            </code> 

<code>    </code><code>mysql&gt; start slave;        </code><code>#开启从服务器</code>

<code>    </code><code>mysql&gt; show slave status\G;   </code><code>#查看从服务器状态</code>

<code>四、验证主从:</code>

<code>    </code><code>主服务器:</code>

<code>        </code><code>mysql&gt; create database db_test;   </code><code>#创建数据库</code>

<code>    </code><code>从服务器:</code>

<code>    </code><code>mysql&gt; show databases;         </code><code>#查看服务器是否同步</code>

<code>五、主主复制</code>

<code>    </code><code>服务器A:</code>

<code>        </code><code>[mysqld]                </code><code>#添加内容</code>

<code>    </code><code>log</code><code>-</code><code>bin</code><code>=</code><code>master</code><code>-</code><code>bin</code>          <code>#启用二进制日志</code>

<code>    </code><code>relay</code><code>-</code><code>log</code><code>=</code><code>slave</code><code>-</code><code>log         </code><code>#启用中继日志</code>

<code>    </code><code>server</code><code>-</code><code>id</code><code>=</code><code>1</code>             <code>#服务器id,全局唯一</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>offset</code><code>=</code><code>1</code>         <code>#自增列起始</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>increment</code><code>=</code><code>2</code>      <code>#自增列一次步进(例:1,3,5,7,9...)</code>

<code>    </code><code>mysql&gt; grant replication slave,replication client on </code><code>*</code><code>.</code><code>*</code> <code>to  </code><code>'copy'</code><code>@</code><code>'192.168.0.50'</code> <code>identified by </code><code>'123.com'</code><code>;</code>

<code>    </code><code>mysql&gt; change master to master_host</code><code>=</code><code>'192.168.0.50'</code><code>,master_user</code><code>=</code><code>'copy'</code><code>,</code>

<code>          </code><code>master_password</code><code>=</code><code>'123.com'</code><code>,master_log_file</code><code>=</code><code>'master-bin.000001'</code><code>,master_log_pos</code><code>=</code><code>106</code><code>;</code>

<code>    </code><code>mysql&gt; start slave;   </code>

<code>    </code><code>mysql&gt; show slave status\G;  </code>

<code>                </code> 

<code>    </code><code>服务器B:              </code>

<code>        </code><code>log</code><code>-</code><code>bin</code><code>=</code><code>master</code><code>-</code><code>bin</code>

<code>    </code><code>relay</code><code>-</code><code>log</code><code>=</code><code>slave</code><code>-</code><code>log</code>

<code>    </code><code>server</code><code>-</code><code>id</code><code>=</code><code>10</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>offset</code><code>=</code><code>2</code>         <code>#自增列起始</code>

<code>    </code><code>auto</code><code>-</code><code>increment</code><code>-</code><code>increment</code><code>=</code><code>2</code>      <code>#自增列一次步进(例:2,4,6,8,10...)</code>

<code>        </code><code>mysql&gt; grant replication slave,replication client on </code><code>*</code><code>.</code><code>*</code> <code>to  </code><code>'copy'</code><code>@</code><code>'192.168.0.10'</code> <code>identified by </code><code>'123.com'</code><code>; </code>

<code>        </code><code>master_password</code><code>=</code><code>'123.com'</code><code>,master_log_file</code><code>=</code><code>'master-bin.000003'</code><code>,master_log_pos</code><code>=</code><code>106</code><code>;</code>

<code>六、半同步复制</code>

<code>    </code><code>要想使用半同步复制,必须满足以下几个条件:</code>

<code>        </code><code>1.</code> <code>MySQL </code><code>5.5</code><code>及以上版本</code>

<code>    </code><code>2.</code> <code>变量have_dynamic_loading为YES</code>

<code>    </code><code>3.</code> <code>异步复制已经存在</code>

<code>    </code><code>主:</code>

<code>    </code><code>mysql&gt; INSTALL PLUGIN rpl_semi_sync_master SONAME </code><code>'semisync_master.so'</code><code>;     </code><code>#安装插件</code>

<code>    </code><code>mysql&gt; show plugins;           </code><code>#查看插件是否安装成功</code>

<code>    </code><code>mysql&gt; </code><code>SET</code> <code>GLOBAL rpl_semi_sync_master_enabled </code><code>=</code> <code>1</code><code>; </code><code>#启用半同步</code>

<code>    </code><code>mysql&gt; show status like </code><code>'Rpl_semi_sync_master_status'</code><code>;   </code><code>#查看是否在运行</code>

<code>    </code><code>从:</code>

<code>    </code><code>mysql&gt; INSTALL PLUGIN rpl_semi_sync_slave SONAME </code><code>'semisync_slave.so'</code><code>;       </code><code>#安装插件</code>

<code>    </code><code>mysql&gt; show plugins;</code>

<code>    </code><code>mysql&gt; </code><code>SET</code> <code>GLOBAL rpl_semi_sync_slave_enabled </code><code>=</code> <code>1</code><code>;      </code><code>#启用半同步</code>

<code>    </code><code>mysql&gt; STOP SLAVE          </code><code>#关闭复制线程</code>

<code>    </code><code>mysql&gt; START SLAVE            </code><code>#开启复制线程</code>

<code>    </code><code>mysql&gt; show status like </code><code>'Rpl_semi_sync_slave_status'</code><code>;    </code><code>#查看是否在运行</code>

<code>    </code><code>mysql&gt; show variables like </code><code>'%Rpl%'</code><code>;      </code><code>#查看和半同步相关的服务器变量</code>

<code>        </code><code>rpl_semi_sync_master_enabled        </code><code>#是否启用半同步</code>

<code>        </code><code>rpl_semi_sync_master_timeout        </code><code>#等待超时时间</code>

<code>        </code><code>rpl_semi_sync_master_wait_for_slave_count</code>

<code>            </code><code>#需要等待多少个slave应答,才能返回给客户端</code>

<code>    </code><code>mysql&gt; show status like </code><code>'%Rpl_semi%'</code><code>;        </code><code>#半同步状态</code>

<code>        </code><code>Rpl_semi_sync_master_clients            </code><code>#当前半同步复制从的个数</code>

<code>七、和复制相关的文件</code>

<code>    </code><code>从节点:</code>

<code>        </code><code>master.info:用于保存slave连接至master时的相关信息(账号,密码,服务器地址,复制的二进制文件等)</code>

<code>    </code><code>relay</code><code>-</code><code>log.info:保存当前slave节点上已经复制到的二进制文件位置,和relay</code><code>-</code><code>log的位置 </code>

<code>   </code> 

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