两台服务器的主从数据库实时同步

首先要注意的是,两台服务器要是一样的centos版本,一样的MySQL版本,一样的数据库配置,一样的数据库:

Linux版本

数据库版本

数据库

IP

Centos 7 测试机--》(1

5.6.37

oa

10.234.145.146

Centos 7 虚拟机--》(2

5.6.37

oa

10.234.145.55

Mysql版本在5.1.7之前是修改配置文件,而之后就不是了,我们用的是之后的版本,所以以我们原本的来做,这里我们把主服务器写为(1--master,从数据库写为(2--slave

--master服务器--

1. 我们打开(1)的数据库配置文件,添加:

   Server_id = 1        //1代表它是主服务器,当然我看网上也有写10

   Binlog-do-db = oa    //oa是要同步的数据库

2. 连接数据库,为服务器创建连接账户,用于同步

   mysql>GRANT FILEREPLICATION SLAVE ON *.* TO root@10.234.145.55 IDENTIFIED BY ‘root’;

3. 重启mysql服务:systemctl restart mysql

--slave服务器--

1. Slave链接数据库:

   Mysql>show variables like server_id; //查看slave的server_id是几,如果不是2,就改为2

  MySQL>set global server_id=2;   //然后查看是否已改

2. 给权限:

   Mysql>grant file on *.* to root@10.234.145.146 identified by root;

1. 查看master上的状态:

 

2. slave连接数据库的状态下,stop slave状态下编辑:

MySQL>change master to

     >master_host=10.234.145.146,

     >master_user=root,

     >master_password=root,

     >master_log_file=mysql-bin.000009, //这个要和master查询的保持一致

     >master_log_pos=962;                   //这个就是master查出的Position

3. 然后开启同步:

  Mysql>start slave;

4. 查看slave状态:

  Mysql>show slave status\G //重点看slave_io_running:yes  slave_sql_running:yes

  //如果都为yes就成功了。

//如果io的显示connecting,则有三种情况:1.网络不通,2.pos不对,3.同步密码错误

//如果sql显示no,有两种情况:1.程序可能在slave上进行了写操作,2.slave机器重启后,事务回滚造成的

一般是事务回滚造成的:
解决办法
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

解决办法二、

首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值

进入master

mysql> show master status;
+----------------------+----------+--------------+------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000094 | 33622483 |              |                  | 
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

然后到slave服务器上执行手动同步:
mysql> change master to 
> master_host='master_ip',
> master_user='user', 
> master_password='pwd', 
> master_port=3306, 
> master_log_file=localhost-bin.000094', 
> master_log_pos=33622483 ;
1 row in set (0.00 sec)
mysql> start slave ;
1 row in set (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes

手动同步需要停止master的写操作! 

猜你喜欢

转载自blog.csdn.net/small_33/article/details/78978415