Mysql5.6.28版本主从复制详解

本文详细介绍了一种在Ubuntu系统中实现Mysql主从复制的方法,包括安装配置、授权、状态查询等步骤,并通过实例验证了复制效果。

之前只会用Mysql基本的操作语句,有一天由于某种原因才让我有了对Mysql主从复制进行了解的欲望,人不思不进。

首先,说一下我的经历,之前由于某种原因在不同的Ubuntu系统上装相同版本的Mysql数据库,但是有的资源并不是很好找,所以就把另外一台从设备也装了同样的系统,比较方便。下面说一下具体步骤:

1.准备两台电脑,装同样的Linux系统,我两台电脑装的都是Ubuntu15.04(32位);

2.使用apt-get install mysql-server  直接安装Mysql服务,安装好以后的Mysql版本是 5.6.28,具体的安装过程就不详细列了,很简单;

3.修改mysql配置文件,由于Mysql版本不一样,所以my.cnf配置文件会有些变化,我参考一些Mysql书籍直接在my.cnf下修改配置,之前装过mysql也是直接在my.cnf下直接修改,不过msyql5.6.28版本有些变化,我先找到 /etc/mysql/my.cnf目录下的文件,mysql配置文件都是引用的别的文件夹下的文件,最后找到了/etc/mysql/myssql.conf.d/mysqld.cnf下的文件,现在我们开始修改配置 gedit mysqld.cnf文件(编辑类工具选择其中之一就可以,看自己用哪个顺手),

master主机关键配置:

[mysqld]
log_bin = /var/log/mysql/mysql-bin.log   //[必须]启用二进制日志(这里要看你的mysql-bin.log文件在哪里)
server-id=1      //[必须]服务器唯一ID,默认是1,可以取IP最后一段用来区分,也可以按照自己制定规则进行区分(不能重复)

master主机关键配置:

log_bin = /var/log/mysql/mysql-bin.log   //[非必须]启用二进制日志(这里要看你的mysql-bin.log文件在哪里),可以不启用
server-id=1      //[必须]服务器唯一ID,默认是1,可以取IP最后一段用来区分,也可以按照自己制定规则进行区分(不能重复)

4.重启两台机器mysql服务

/etc/init.d/service msyql restart

5.在主服务器上授权slave账户

(1)首先登录master主机的mysql  mysql -u root -p password 

(2)mysql>GRANT REPLICATION SLAVE ON *.* to 'loginname'@'%' identified by 'password';重点说一下这条语句吧,这是授权给slave账户连接master账户的权限,loginname和password表示连接是用的账户名和密码,% 表示所有主机都可以连接(只要登录账号和密码正确),这样一来master就显得很不安全,所以可以将 % 替换成 相应slave主机的IP地址。说个尴尬的事情吧,最开始配置的时候我把这里理解成了master主机的IP地址,所以导致我在slave主机上连了半天连不上,汗。

6.在master上查看master状态,以便slave连接所用

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

这是配置slave之前最新的master状态,如果操作数据库状态可能发生改变,如果操作了重新查看master状态

7.在slave上配置为master的从服务器

mysql >change master to master_host='192.168.1.152',

   ->master_user='loginname',

   ->master_password='password',

   ->master_log_file='mysql-bin.000004',

   ->master_log_pos=120; (这里 120 不加引号'')

配置完成后启动slave

mysql >start slave;  

检查slave状态

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                 Master_Host: 192.168.1.152
                 Master_User: root
                 Master_Port: 3306
                Connect_Retry: 60
               Master_Log_File: mysql-bin.000004
            Read_Master_Log_Pos: 213
               Relay_Log_File: mysqld-relay-bin.000012
                Relay_Log_Pos: 283
          Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: 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: 213
            Relay_Log_Space: 457
            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: 1
                Master_UUID: 0b87cdae-2962-11e6-a0b5-5cac4c73ce70
            Master_Info_File: /var/lib/mysql/master.info
                SQL_Delay: 0
          SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                Master_Bind: 
        Last_IO_Error_Timestamp: 
       Last_SQL_Error_Timestamp: 
              Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
              Auto_Position: 0

Slave_IO_Running: Yes
Slave_SQL_Running: Yes 这两行必须都为yes,否则运行不成功,检查自己哪里出了问题

8.测试

mysql> create database ceshi;
Query OK, 1 row affected (0.00 sec)


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ceshi              |
| mysql              |
| performance_schema |
| zyttest            |
+--------------------+
5 rows in set (0.00 sec) 在master创建新数据库ceshi,我们查看slave服务器的数据库状态

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ceshi              |
| mysql              |
| performance_schema |
| zyttest            |
+--------------------+
5 rows in set (0.06 sec),这里slave服务器也有了ceshi数据库,完成工作。做了这个工作,希望可以帮助到更多人,同时自己也相当于做了个笔记,有问题的地方,还望指出,共同进步,谢谢观赏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值