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; 查看链路