12
2023
05
11:53:22

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



推荐点击下面图片,通过本站淘宝优惠价购买:

image.png

首先要注意的是,两台服务器要是一样的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 FILE,REPLICATION 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的写操作! 



本文链接:https://www.hqyman.cn/post/4124.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:





休息一下,本站随机推荐观看栏目:


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: