Mysql下实现主从复制

Mysql下实现主从复制

前言

系统承担大量的web访问量时,增加webserver实现负载均衡,由于增加webserver太多了,导致数据库
的连接资源不够用,而这个时候已经分库分表了,发现数据库读写比很高,这个时候通常用到读写分离
方案,数据库读写分离要求数据库的的主从复制,使用mysql实现主从复制

系统环境
  
在虚拟机中安装两个linux系统,分别安装mysql,实现读写分离。
linux系统使用的是 RedHat 6.2版本
mysql使用的是 mysql-5.5.36-el6.i686版本

linux下安装Mysql

下载linux下mysql安装文件MySQL-5.5.36-1.el6.i686.rpm,
下载地址 http://dev.mysql.com/downloads/file.php?id=450759
 安装mysql只需要MySQL-server-5.5.36-1.el6.i686.rpm
MySQL-client-5.5.36-1.el6.i686.rpm

在/usr/local下创建mysql文件,进入mysql目录
root@longdd ~]# cd /usr/local
[root@longdd local]# mkdir mysql
[root@longdd local]# cd mysql
[root@longdd mysql]# 

首先安装Mysql服务端
[root@longdd mysql]# rpm -ivh MySQL-server-5.5.36-1.el6.i686.rpm

安装的时候会报包冲突
file /usr/share/mysql/ukrainian/errmsg.sys from install of MySQL-server-5.5.36-1.el6.i686 
conflicts with file from package mysql-libs-5.1.66-2.el6_3.i686
卸载系统安装的包,重新安装mysql-server
[root@longdd mysql]# rpm -ev --nodeps  mysql-libs-5.1.66-2.el6_3.i686
[root@longdd mysql]# rpm -ivh MySQL-server-5.5.36-1.el6.i686.rpm
Preparing...                ########################################### [100%]
   1:MySQL-server           ########################################### [100%] (  3%)
安装成功

安装Mysql客户端
[root@longdd mysql]# rpm -ivh MySQL-client-5.5.36-1.el6.i686.rpm
Preparing...                ########################################### [100%]
   1:MySQL-client           ########################################### [100%]
安装成功

启动mysql服务
[root@longdd mysql]# service mysql start
Starting MySQL..                                           [确定]

连接mysql
[root@longdd mysql]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

配置主从服务器

修改主服务器master
#vi /etc/my.cnf 
如果/etc下没有my.cnf文件,则从/etc/share/mysql下拷贝到/etc
[root@longdd mysql]# cp my-medium.cnf /etc/my.cnf
log-bin=mysql-bin //[必须]启用二进制日志
server-id=114 //[
必须]服务器唯一ID,默认是1,一般取IP最后一段

修改从服务器slave
#vi /etc/my.cnf 
如果/etc下没有my.cnf文件,则从/etc/share/mysql下拷贝到/etc
[root@longdd mysql]# cp my-medium.cnf /etc/my.cnf
log-bin=mysql-bin //[必须]启用二进制日志
server-id=133 //[
必须]服务器唯一ID,默认是1,一般取IP最后一段
重启mysql服务
[root@longdd etc]# service mysql restart

在主服务器上建立账号授权slave
mysql> grant replication slave on *.* to 'longdd'@'%' identified by 'longdd'
    -> ;
Query OK, 0 rows affected (0.05 sec)

mysql> 
一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,
如192.168.145.226,加强安全。

查询master状态
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      251 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

配置从服务器
mysql> change master to master_host='192.168.1.114',master_user='longdd',master_password='longdd',
    -> master_log_file='mysql-bin.000001',master_log_pos=251;
Query OK, 0 rows affected (0.11 sec)

启动从服务器复制功能
mysql> start slave
    -> ;
Query OK, 0 rows affected (0.05 sec)

检测从服务器复制功能状态
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.114 //主服务器地址
                  Master_User: longdd  //授权账户,避免用root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 107
               Relay_Log_File: longdd-relay-bin.000002
                Relay_Log_Pos: 253 //同步读取二进制日志
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes  //必须为yes
            Slave_SQL_Running: Yes  //必须为yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 410
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 114
1 row in set (0.00 sec)

mysql> 
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,
否则都是错误的状态(如:其中一个NO均属错误)
至此,主从服务器配置完成。

测试主从服务器

主服务器间表插入一条记录
mysql> create database test;
ERROR 1007 (HY000): Can't create database 'test'; database exists
mysql> create database user;
Query OK, 1 row affected (0.00 sec)

mysql> use user;
Database changed
mysql> create table user(id int(5),name char(20));
Query OK, 0 rows affected (0.13 sec)

mysql> insert user(id,name) values(1,'longdd');
Query OK, 1 row affected (0.04 sec)

mysql> 

从服务器查询
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| user               |         //从服务器建的表
+--------------------+
5 rows in set (0.00 sec)

查询插入表中的数据
mysql> use user;
Database changed
mysql> select *  from user;
+------+--------+
| id   | name   |
+------+--------+
|    1 | longdd |
+------+--------+
1 row in set (0.00 sec)

mysql> 
至此,从数据库中可以查询到主数据库中插入表中的数据。

结论

监控slave中的两个‘Yes’,当发现只有一个或零个'Yes'时, 说明从数据出现问题。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值