02、MySQL-------主从复制

目录

  • 七、MySql主从复制
    • 启动主从复制:
    • 原理:
    • 实现:
      • 1、创建节点
      • 2、创建数据库
      • 3、主从配置
        • 1、主节点
        • 2、从节点
      • 4、测试:
      • 5、问题:
        • 1、uuid修改
        • 2、service_id
        • 3、读写不同步
          • 方法1:
          • 方法2:

七、MySql主从复制

启动主从复制:

1、打开虚拟机 150(主master)、 152(从slave)

2、 mysql -uroot -p123456 进入主和从数据库

​ 服务器mysql -u root -p出现错误:-bash: mysql: command not found
​ 输入:alias mysql=/usr/local/mysql/bin/mysql

3、查看从数据库状态是否正确,是否有两个yes,没有两个yes就是没成功

​ (启动从服务:start slave;)查看状态: show slave status \G

​ 没成功就进行修改,查看【七-5-3读写不同步解决】

4、启动mycat: /usr/local/mycat/bin/mycat start

​ 重启mycat:/usr/local/mycat/bin/mycat restart

5、查看mycat日志: tail -f -n 50 /usr/local/mycat/logs/wrapper.log

重启mysql:service mysqld restart

原理:

主数据库用于写数据、修改数据,从数据库用于读数据

要控制写入的数据都到主数据库,就需要用到 mycat中间件,进行读写分离

02、MySQL-------主从复制_第1张图片

实现:

1、创建节点

主节点master

先克隆一个 192.168.209.150 的虚拟机,作为mysql的master主节点

创建的步骤如截图中所示,截图不是克隆mysql的,是之前的。

02、MySQL-------主从复制_第2张图片

02、MySQL-------主从复制_第3张图片

从节点slave

跟主节点一样,ip 设置为:192.168.209.152

2、创建数据库

主节点数据库:

02、MySQL-------主从复制_第4张图片

从节点数据库**

和主节点数据库一样进行创建连接

3、主从配置

1,在主服务器 vi /etc/my.cnf 中添加:
   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号(比如192.168.209.150 取150)
   server-id=150
   log-bin=master-bin
   log-bin-index=master-bin.index
2,启动主服务器(就是启动mysql);
3,执行show master status; 查看主服务器状态;
4,复制当前主服务器中的数据库内容;
5,在从服务器中创建主服务器数据库;
6,在从服务器vi /etc/my.cnf中添加:
	server-id=152
	relay-log-index=slave-relay-bin.index
	relay-log=slave-relay-bin 
7,启动从服务器(就是启动mysql);
8,在从服务中执行:
解释:
	change master to master_host='192.168.209.150', //Master 服务器Ip
	master_user='root', #主节点的账号
	master_password='123456', #主节点的密码
	master_log_file='master-bin.000001',//Master服务器产生的日志
	master_log_pos=156; #主节点的position
	
	在mysql输入这些命令
	change master to master_host='192.168.209.150',master_user='root',master_password='123456',master_log_file='master-bin.000001',master_log_pos=156;
	
	
9,启动从服务:start slave;
     查看状态:  show slave status \G
     
     
10,在主服务器中添加一条数据,查看在从服务器中是否同步成功;
//注意克隆服务器,需要 
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf_bak 
然后再重新启动mysql
1、主节点

修改配置文件

02、MySQL-------主从复制_第5张图片

登录mysql

服务器mysql -u root -p出现错误:-bash: mysql: command not found
输入:alias mysql=/usr/local/mysql/bin/mysql
再重复mysql -u root -p,输入mysql口令即可

02、MySQL-------主从复制_第6张图片
查看主服务器状态

在这里插入图片描述

2、从节点

克隆服务器作为从节点,然后修改配置文件

02、MySQL-------主从复制_第7张图片
重新启动服务器

02、MySQL-------主从复制_第8张图片

在从节点的数据库中修改配置

02、MySQL-------主从复制_第9张图片
查看从节点的状态,这里出了个 主从数据库uuid因为拷贝而一样的问题,修改步骤往下看

02、MySQL-------主从复制_第10张图片

4、测试:

1、主数据库创建数据库,看从数据库会不会自动创建

02、MySQL-------主从复制_第11张图片

2、在主数据库中创建一张表,看从数据库是否能同步(会)

3、在从数据库中创建一张表,看主数据库会不会同步(不会)

02、MySQL-------主从复制_第12张图片
4、在主数据库的表中修改数据,看从数据库是否会同步(会)

5、在从数据库的表中修改数据,看主数据库是否会同步(不会)

02、MySQL-------主从复制_第13张图片

5、问题:

从节点出现这个问题

02、MySQL-------主从复制_第14张图片

在这里插入图片描述

1、uuid修改

1、查看uuid是否一致,两个服务器的mysql的uuid不能一样的

查询这个 auto.cnf 文件的地址,因为虚拟机是拷贝的,所以uuid可能会一一致,需要修改。

02、MySQL-------主从复制_第15张图片

从数据库的uuid随便改个字母,不跟主数据库一样就可以了

02、MySQL-------主从复制_第16张图片
重启一下:systemctl restart mysqld
在这里插入图片描述

重新登录

mysql -uroot -p 登录mysql

stop slave; 停止链路

start slave; 启动链路

show slave status \G; 查看链路

02、MySQL-------主从复制_第17张图片
成功变成两个yes

不过下面有显示一个错误,先不理。

02、MySQL-------主从复制_第18张图片

原因只是查看的时候 \G 多了个 ; 分号而已,去掉就好了。

02、MySQL-------主从复制_第19张图片

2、service_id

这个是查看service_id的,影响不大。上面的uuid改好就可以了

2、查看service_id 是否因为两个虚拟机是拷贝的而出现id一致的情况

在数据库里面输入命令查看:show variables like ‘server_id’;

发现主节点是 150 , 从节点是1(这个应该是我们设置的152,要重启mysql看看),并没有重复

02、MySQL-------主从复制_第20张图片

重启数据库,这个value的值变成 152 才是正确的
02、MySQL-------主从复制_第21张图片

start slave 后 变成两个no了
02、MySQL-------主从复制_第22张图片
重新 reset slave 设置下就可以了

02、MySQL-------主从复制_第23张图片

现在又回到刚刚一个yes的问题,两个sql的uuid是一样的,修改成不一样的就好了

防火墙要关的才能同步数据

3、读写不同步
方法1:

原因:主从配置的position不一致,时间太久导致主数据库的position变了,应该是这个原因

主节点的position变了
02、MySQL-------主从复制_第24张图片

要在从节点修改下

02、MySQL-------主从复制_第25张图片
修改:

stop slave; 不知道用不用先停掉再改,现在我是先停掉了。

02、MySQL-------主从复制_第26张图片

1、mysql -uroot -p 登录mysql

2、stop slave; 停止链路

3、修改master_log_pos=xxxxxx(改这个);把下面整行都重新设置

在mysql输入这些命令
change master to master_host='192.168.209.150',master_user='root',master_password='123456',master_log_file='master-bin.000001',master_log_pos=156;

02、MySQL-------主从复制_第27张图片

4、start slave; 启动链路

5、show slave status \G; 查看链路

又好了。
02、MySQL-------主从复制_第28张图片
但是只要测试一次,下一次又不行了。

方法2:

这个是百度其他办法,也是改后只成功一次

mysql> stop slave ;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> start slave ;

02、MySQL-------主从复制_第29张图片

暂时先不理

你可能感兴趣的:(MySQL,mysql,数据库,主从复制)