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

目录

七、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中间件,进行读写分离

实现:

1、创建节点

主节点master

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

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

从节点slave

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

2、创建数据库

主节点数据库:

从节点数据库**

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

3、主从配置

java 复制代码
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、主节点

修改配置文件

登录mysql

服务器mysql -u root -p出现错误:-bash: mysql: command not found

输入:alias mysql=/usr/local/mysql/bin/mysql

再重复mysql -u root -p,输入mysql口令即可

查看主服务器状态

2、从节点

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

重新启动服务器

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

查看从节点的状态,这里出了个 主从数据库uuid因为拷贝而一样的问题,修改步骤往下看

4、测试:

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

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

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

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

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

5、问题:

从节点出现这个问题

1、uuid修改

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

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

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

重启一下:systemctl restart mysqld

重新登录

mysql -uroot -p 登录mysql

stop slave; 停止链路

start slave; 启动链路

show slave status \G; 查看链路

成功变成两个yes

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

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

2、service_id

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

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

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

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

重启数据库,这个value的值变成 152 才是正确的

start slave 后 变成两个no了

重新 reset slave 设置下就可以了

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

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

3、读写不同步
方法1:

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

主节点的position变了

要在从节点修改下

修改:

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

1、mysql -uroot -p 登录mysql

2、stop slave; 停止链路

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

java 复制代码
在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;

4、start slave; 启动链路

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

又好了。

但是只要测试一次,下一次又不行了。

方法2:

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

mysql> stop slave ;

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

mysql> start slave ;

暂时先不理

相关推荐
老邓计算机毕设1 小时前
SSM智慧社区家政服务系统80q7o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架
松涛和鸣2 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa2 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k3 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦3 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL4 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·4 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德4 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫4 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i5 小时前
完全卸载MariaDB
数据库·mariadb