linux 虚拟机和windows mysql 实现主从复制和读写分离

1.如何实现主从复制?

MySQL复制过程分成三步:

1). MySQL master 将数据变更写入二进制日志( binary log)

2). slave将master的binary log拷贝到它的中继日志(relay log)

3). slave重做中继日志中的事件,将数据变更反映它自己的数据

2.为什么实现主从复制和读写分离?

        为了把增删改查分开道不同数据库,减少数据库的压力。

        增加、修改、删除,在一个数据库,读取操作,也就是查找操作在另一个数据库。而且,增删改是会对数据库进行改动的,在主库进行,然后通过binlog日志同步到从库。查找操作因为更频繁,所以单独分开放到从库。

        主库的数据可以同步到从库,但是从库的修改是不能影响到主库的。

本次以windows10的mysql为主库,linux虚拟机安装centos7的mysql为从库。

3.linux上mysql安装流程

        1.安装好虚拟机之后,先下载XShell,并连接到虚拟机

        

        2.在XShell上执行

yum -y install lrzszyum 

        这是把本机的资源传到虚拟机的一个插件,因为直接拖过去可能导致资源丢失。

        然后运行

rz 在弹出的窗口中传入官网下载的mysql文件

准备好linux环境,可以去官网中下载。可以在这个链接https://dev.mysql.com/downloads/mysql/

3.检查linux是否安装了mariadb数据库,卸载掉

检查命令:

yum list installed | grep mariadb

卸载命令:

yum remove xxxx

添加两个依赖

yum -y install perl
​
yum -y install net -tools

4.解压传入的mysql安装包

tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz

5.安装解压的包(按照这四个的顺序是可行的)

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
​
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
​
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
​
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm

6.启动mysql服务

systemctl start mysqld
​
systemctl status mysqld

7.查看密码

cat /var/log/mysqld.log| grep password
效果如下:
2023-09-04T01:41:19.201082Z 1 [Note] A temporary password is generated for root@localhost: <inQTcsVN8)x
​
<inQTcsVN8)这个是电脑生成的密码,复制下来,待会登录用

8.登录mysql

进入bin目录下:
mysql -uroot -p
​
会弹出一个Eenter password: (复制的密码粘贴在这里,没有显示,直接enter确认是OK的)

9.设置密码策略

修改:密码最小长度策略

set global validate_password_length=6;

修改密码强度检查登记策略

set global validate_password_policy=0;

修改密码

set password for 'root'@'localhost' =  password('123456');

10.开启mysql远程的root连接服务(%号表示远程连接,IDENTIFIED BY后面跟的密码)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
​
例如:grant all privileges on *.* to root@'%' identified by '123456'

11.刷新一下

flush privileges

12.关闭防火墙

systemctl stop firewalld

3.windows作为主库的配置,创建远程用户给予权限

 安装mysql时会有一个my.ini文件,这里在mysqld下面再增加配置:

[mysqld]
log-bin=D:/DevelopmentSoftware/MySql/mysql/mysqldata/Data/mysql-bin  #[必须]启用二进制日志
server-id=100       #[必须]服务器唯一ID(唯一即可)

第一个配置是开启二进制日志,

第二个配置是给一个唯一ID,只要唯一可以自己写。

然后重启mysql服务就可以了。(重启的方式有两种,一个是Windows + R 组合快捷键打开“运行”窗口,之后键入 services.msc 按下回车键,即可打开“服务”;或者“此电脑”图标上点击鼠标右键,在弹出的右键菜单中再点击“管理”,打开计算机管理后,点击左侧下方的“服务和应用程序”,就可以看到服务了)

也可参考如下文章:https://baijiahao.baidu.com/s?id=1760332747942821225&wfr=spider&for=pc

配置完成后打开cmd命令窗口,mysql -uroot -pXXXXX(密码)登录mysql,进行如下操作:

一. 创建用户命令
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%

二. 授权
GRANT privileges ON databasename.tablename TO 'username'@'host'
例如:GRANT all ON master.user TO 'zsc'@'%';
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*

三.

4.linux作为从库的配置

修改mysql的my.cnf文件

第一步:首先找到mysqld的路径:

命令:which mysqld

[root@localhost ~]# which mysqld
/usr/sbin/mysqld

第二步:敲命令:/usr/local/mysql/bin/mysqld --verbose --help |grep -A 1 'Default options'

[root@localhost ~]# /usr/sbin/mysqld --verbose --help |grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
​

第三步:进入文件夹,打开文件

[root@localhost ~]# cd /etc
[root@localhost etc]# vi my.cnf

第四步:增加配置,设置服务器唯一ID

server-id=200       #[必须]服务器唯一ID(唯一即可)

第五步:登录mysql,change master to 链接主库

change master to master_host='192.168.2.63',master_user='zsc',master_password='123456',master_log_file='logbin.000004',master_log_pos=154;

此时已经可以用navicat分别连接主从库,在主库进行操作,从库刷新后也可以看到

5.遇到的问题

1.由于主库和从库版本不一致的问题

Slave is not configured or failed to initialize properly. You must at least set --server-id

背景: zabbix 数据库迁移,搭建主从,主是5.6.25,从是5.7.15,流式备份应用 redo.log 之后,change master 和reset slave 时报出如下错误

有版本相同和不同两种处理的方法。
见如下文章

https://blog.csdn.net/weixin_40816738/article/details/100053304

2.设置环境变量,需要找到mysql_system_tables.sql文件

find命令用来在指定目录下查找文件
locate命令用于查找符合条件的文档
which命令用于查找文件。
  which指令会在环境变量$PATH设置的目录里查找符合条件的文件
  
这里 locate mysql_system_tables.sql 就可以找到具体位置

3.如果碰到ifconfig看不到ens33如下方法解决:

1.关闭网络服务
    service NetworkManager stop
2.删除NetworkManager.state文件
    sudo rm -rf /var/lib/NetworkManager/NetworkManager.state
3.启动网络服务
    service NetworkManager start

4.验证从服务器的两个服务的状态

SHOW SLAVE STATUS\G  
(\G后面不用加分号,不然会报错)

可以查看到复制状态信息,确保Slave_IO_Running和Slave_SQL_Running均为Yes,表示复制正常运行。

  

如果Slave_SQL_Running还是为No;
1.stop slave;
2.主机 show master status;
3.从机 重复
change master to master_host='192.168.2.63',master_user='zsc',master_password='123456',

master_log_file='logbin.000004',master_log_pos=154;
修改master_log_file='logbin.000004',master_log_pos=154;为主机一样。
4.start slave;

5.然后再次检查SHOW SLAVE STATUS\G

 

如果Slave_IO_Running: No解决办法:
1:使用 find / -iname "auto.cnf" 命令查找你数据库的auto.cnf 配置文件。
find / -iname "auto.cnf"
2、把查询到的文件删除,系统将重新自动分配
rm  +删除的文件
3:登录mysql,重启slave,再次验证
mysql -uroot -p   登录mysq
stop slave;    停止链路
start slave;    启动链路
show slave status \G;   查看链路

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值