Home  >  Article  >  Database  >  mysql主从同步_MySQL

mysql主从同步_MySQL

WBOY
WBOYOriginal
2016-05-27 13:46:321197browse

原理:

 

从服务器的IO线程连接主服务器获取二进制日志,并在本地保存为中继日志,

接着通过SQL线程来在执行中继日志中的Sql语句,

从而使从库和主库保持一致。

 

实验拓扑:

                         |-----192.168.2.1 主(vm1)Master

---------RHEL6.5---------|   

                         |-----192.168.2.2 从(vm1) Slave

 

实现功能:从数据库同步主数据库

 

配置过程:

1、公共配置

2、Master配置

3、Slave配置

4、测试同步

 

 

【公共配置】

主从安装Mysql数据库

#yum -y install mysql-server   #安装MySQL服务

#service msyqld start          #启动服务

#setenforce 0                  #关闭selinux

#service iptables stop         #关闭防火墙

 

【Master配置】

 

1、配置Master的配置文件/etc/my.cnf,供同步使用。

#cat /etc/my.cnf

...

[mysqld]

log-bin    //打开log-bin文件

server-id=1    //数据库二进制日志,0

.. ..

 

2、查看重启服务

[root@localhost ~]# mysql -uroot -pwsyht123 -e "show variables like ‘log_bin’;" #查看有没有开启log-bin
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
[root@master ~]# service mysqld restart

 

 

3、主服务器端建立同步测试数据库

 

创建库和表、在master服务器上授权一个用户可以从slave 服务器上连接自已,且有拷贝数据的权限

[root@master ~]# mysql -uroot -pwsyht123
mysql> grant replication slave on *.* to 'wsyht'@'192.168.2.%' identified by '123456';
mysql> flush privileges;    #刷新权限
mysql> flush table with read lock;  #读锁,不让别的用户往里写,当前窗口还不能断
mysql> show master status;   #查看master状态
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000028 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> show databases;    #查看Master当前数据库有什么库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

 

 

4、备份当前所有库所有表(克隆多一个窗口进行如下操作)

[root@master ~]# mysqldump -uroot -pwsyht123 -A -B --events > /opt/all.$(date +%F).sql #开多一个窗口进行全库备份

 

5、拷贝备份文件到slave从服务器

[root@master ~]# rsync -avzP -e "ssh -p 22" /opt/all.$(date +%F).sql  [email protected]:/opt/

 

【Slave配置】

 

1、修改server-id号

[root@slave ~]# cat /etc/my.cnf

[mysqld]

...

server-id=2

...

 

2、重启服务

[root@slave ~]# mysql -uroot -pwsyht123 -e "show variables like 'log_bin';" #查看有没有开启log-bin

[root@slave ~]# service mysqld restart

 

3、导进数据库

[root@slave ~]#  mysql -uroot -pwsyht123 -e "show databases;" #查看当前slave有什么库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
[root@slave ~]# mysql -uroot -pwsyht123 < /opt/all.$(date +%F).sql #将主库的备份数据导进从库
[root@slave ~]#  mysql -uroot -pwsyht123 -e "show databases;" #导进库后再次查看
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| mysql              |
| performance_schema |
+--------------------+

 

4、测试使用授权用户是否能连接登陆主数据库服务器

[root@slave ~]# mysql -h192.168.2.1 -uwsyht -p123456

mysql> quit

 

5、建立同步账户的信息

[root@slave ~]# mysql -uroot -pwsyht123
mysql> change master to
master_host='192.168.2.1',     #连接的主机
master_user='wsyht',           #连接同步Master的账户
master_password='123456',      #连接同步Master的密码
master_log_file='mysql-bin.000028', #Master的现记录的日志文件
master_log_pos=107;   #Master记录的日志点
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.1
                  Master_User: wsyht
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000028          #Master正在使用的日志文件
          Read_Master_Log_Pos: 107                       #Master正中使用的日志点
               Relay_Log_File: mysql-relay-bin.000002    #Slave正使用的中继日志文件
                Relay_Log_Pos: 253                       #Slave中继日志文件的日志点
        Relay_Master_Log_File: mysql-bin.000028
             Slave_IO_Running: Yes    #IO线程呈YES为正常
            Slave_SQL_Running: Yes    #SQL线程呈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: 409
              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
1 row in set (0.00 sec)

 

 

ERROR: 

No query specified
mysql> show databases;  #查看Slave当前数据库有什么库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

 

 

【测试同步】

 

1)Master配置

 

1、解锁

mysql> unlock tables;  #解锁表,主库从新提供服务

 

2、创建新库

mysql> create database test;   #创建test数据库测试同上海
Query OK, 1 row affected (0.00 sec)

mysql> show databases;    #查看Master当前数据库有什么库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

 

 

2)Slave配置

 

1、查看有没有同步数据库

mysql> show databases;    #查看Slave当前数据库有什么库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

 

#看到上面slave表的信息可看到有test,主从同步成功,实验完成

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn