您的位置:首页 > 数据库 > MySQL

MySQL复制测试

2014-04-27 10:58 405 查看
两台电脑,在一个局域网,使用的都是wampserver2.4。

一、主服务器配置

1.执行SQL语句

SHOW MASTER STATUS\G

mysql> show master status\G

*************************** 1. row ***************************

             File: mysql-bin.000022

         Position: 558764409

     Binlog_Do_DB:

 Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

2.备份my.cnf,然后在my.cnf中做如下更改:

[mysqld]

#add at 2014/04/27

log-bin=binary-log 

#add at 2014/04/27

port=3306

3.重启wampserver后,执行

SHOW MASTER STATUS\G

mysql> SHOW MASTER STATUS\G

*************************** 1. row ***************************

File: binary-log.000001

Position: 239980

 Binlog_Do_DB:

 Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

4.执行下面的语句,也可以获得上述信息:

mysqldump -uroot -p --master-data tmp

输出信息:

D:\program files\wamp\bin\mysql\mysql5.6.12\bin>mysqldump -uroot -p --master-da

a tmp

Enter password:

-- MySQL dump 10.13  Distrib 5.6.12, for Win64 (x86_64)

--

-- Host: localhost    Database: tmp

-- ------------------------------------------------------

-- Server version       5.6.12-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0

*/;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--

-- Position to start replication or point-in-time recovery from

--

CHANGE MASTER TO MASTER_LOG_FILE='binary-log.000001', MASTER_LOG_POS=2125489;

mysqldump: Got error: 1049: Unknown database 'tmp' when selecting the database

5.执行SQL

CREATE USER root@'192.168.%';

GRANT REPLICATION SLAVE ON *.* TO root@'192.168.%';

二、从服务器配置

1.对从服务器的my.cnf做如下修改:

server-id=2

read-only=TRUE

2.在从服务器执行下列SQL语句

SHOW SLAVE STATUS;

CHANGE MASTER TO

MASTER_HOST='192.168.1.100',

MASTER_USER='root':

CHANGE MASTER TO

MASTER_LOG_FILE='binary-log.000001',

MASTER_LOG_POS=892901;

3.启动从服务器并验证其操作

SLAVE START;

报错信息,提示该SQL语法错误。

换用SQL语句,

START SLAVE;

执行成功。

再执行SQL语句

SHOW SLAVE STATUS\G

输出信息

mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

               Slave_IO_State: Connecting to master

                  Master_Host: 192.168.1.100

                  Master_User: root

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: binary-log.000001

          Read_Master_Log_Pos: 892901

               Relay_Log_File: ggh-relay-bin.000001

                Relay_Log_Pos: 4

        Relay_Master_Log_File: binary-log.000001

             Slave_IO_Running: Connecting

            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: 892901

              Relay_Log_Space: 120

              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: NULL

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 2003

                Last_IO_Error: error connecting to master 'root@192.168.1.100:33

06' - retry-time: 60  retries: 1

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 0

                  Master_UUID:

             Master_Info_File: c:\wamp\bin\mysql\mysql5.6.12\data\master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has read all relay log; waiting for the sla

ve I/O thread to update it

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp: 140427 03:38:16

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set:

            Executed_Gtid_Set:

                Auto_Position: 0

1 row in set (0.00 sec)

资料上说,若SLAVE_IO_Running和SLAVE_SQL_Running的值为Yes,就证明“主服务器---从服务器”式的MySQL拓扑已经正常运行。可是,我的从服务器的运行结果的这两个值是Slave_IO_Running: Connecting, Slave_SQL_Running: Yes,这能否说明“主服务器---从服务器”式的MySQL拓扑已经正常运行?

经过我再次测试,Slave_IO_Running: Connecting, Slave_SQL_Running: Yes说明“主服务器--从服务器”式的MySQL拓扑没有正常运行,只有当两个值都是Yes时,才能说明该模式正常运行。

三、测试MySQL复制

1.在主服务器执行SQL

PROMPT alpha>;

输出信息

mysql> PROMPT alpha>;

PROMPT set to 'alpha>'

alpha>

2.在从服务器上执行SQL语句

PORMPT beta>;

输出信息

mysql> PROMPT beta>;

PROMPT set to 'beta>'

在从服务器执行SQL语句

SHOW DATABASES;

输出信息

beta>show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.00 sec)

3.执行SQL语句,确认从服务器上什么都不存在

SHOW SCHEMAS;

输出信息

beta>SHOW SCHEMAS;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.00 sec)

4.在主服务器上创建模式和表并确认创建成功,执行SQL语句

CREATE SCHEMA chapter6;

USE chapter6;

CREATE TABLE  replication_test

(

id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

SHOW SCHEMAS;

输出信息

alpha>SHOW SCHEMAS;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| chapter6           |

| movies             |

| movies(2014042002) |

| movies(20140420)   |

| mysql              |

| performance_schema |

| studysql           |

| t2                 |

| test               |

| xj                 |

+--------------------+

11 rows in set (0.00 sec)

奇怪,在执行4的SQL语句之前,SHOW SCHEMAS的执行结果为何不是这样的?

5.在从服务器上检测是否存在在主服务器上创建的chapter6,执行

SHOW SCHEMAS;

从输出信息可知,从服务器上不存在chapter6.

四、总结

1.经过再次测试,发现我的MySQL复制的主从服务器配置已经能够时主从服务器的复制工作正常运行。昨天之所以不成功,是因为,在主服务器上向movies上插入数据的时候,从服务器上并不存在database movies。但是,当我设置从服务器的复制点在创建一个全新的数据库后,复制工作就一切正常。

2.但是,我在主服务器上为从服务器创建一个需要密码认证的帐号时却失败了,报错信息是语法错误。这个问题要解决。

3.从服务器上能否写数据?

经过测试,从服务器可以写数据,可以删除数据,但这些改变对主服务器没有影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: