Heim > Datenbank > MySQL-Tutorial > Hauptteil

mysql主从同步_MySQL

WBOY
Freigeben: 2016-05-27 13:46:32
Original
1310 Leute haben es durchsucht

原理:

 

从服务器的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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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 |
+--------------------+
Nach dem Login kopieren

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

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

mysql> quit

5、建立同步账户的信息

[root@slave ~]# mysql -uroot -pwsyht123
mysql> change master to
master_host=&#39;192.168.2.1&#39;,     #连接的主机
master_user=&#39;wsyht&#39;,           #连接同步Master的账户
master_password=&#39;123456&#39;,      #连接同步Master的密码
master_log_file=&#39;mysql-bin.000028&#39;, #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)
Nach dem Login kopieren

ERROR:

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

【测试同步】

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)
Nach dem Login kopieren

2)Slave配置

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

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

 

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage