在windows和centos做mysql主从搭建方法

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:

网上很多主从搭建的方法,但大多都是同平台下搭建,本篇文章是以centos服务器为主windows2008服务器为从,搭建mysql主从。

一些想法:windows和centos平台不同,是否能做mysql主从,后来想了想,mysql也是可以在windows上跑的,同是mysql应该不会有什么问题存在,然后此篇文章产生了……

MySQL主从复制原理:

MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个Mysql数据库(我们称之为Master)复制到另一个Mysql数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和IO线程)在Slave端,另一个线程(I/O线程)在Master端。

要实现MySQL的主从复制,首先必须要先打开Master端的binlog记录功能。因为整个复制过程实际上就是slave从master端获取binlog日志,然后再在slave上以相同顺序执行获取的binlog日志中所记录的各种SQL操作。

简单点来说:

就是主服务器将改变的内容记录到二进制日志文件(binlog)中,从服务器将主服务器的二进制文件拷贝到它的中继日志(relay log),并重新开启SQL线程,从中继日志中读取二进制日志,使其数据和主服务器的保持一致,最后slave端的I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。

注意:如果你的版本和我所写的版本不同,可能在配置过程中会有问题出现,为了确保成功性,建议现在本地环境测试成功,再对线上服务进行操作,请确保服务器的时间同步一致。

服务器配置:

linux主192.168.0.70
版本Centos6.7 nginx1.10 php5.4.45 mysql5.5.48

windows从192.168.0.71
版本IIS7 mysql5.5.54 php5.6.29

 

master centos

设置master mysql配置文件/etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id = 1
expire_logs_days = 7

log-bin表示开启mysql的binlog日志功能,指定的mysql-bin表示日志文件的命名格式,会生成文件名为mysql-bin.000001、mysql-bin.000002、等的日志文件。

server-id是节点标识,主、从的节点必须是全局唯一,不能相同。

expire_logs_days二进制日志自动删除的天数,0则是不自动删除。

注意,log-bin和server-id都是在[mysqld]模块内的。

注意,先在my.cnf中查找相关参数并修改,如果查找不到则手动添加,参数不能重复。

修改配置文件完成后重启mysql

/etc/init.d/mysql restart

登录mysql查看server-id的值是否为1
SHOW VARIABLES LIKE 'server_id';

m1

查看binglog功能是否开启

mysql>SHOW VARIABLES LIKE 'log_bin';

m2

建立数据库whsir(我这里作为演示用,见附录3)

mysql>CREATE DATABASE whsir;

查看bin-log的信息
mysql>SHOW MASTER STATUS;
File Position Binlog_Do_DB Binlog_Ignore_DB
mysql-bin.000008 107 whsir 

1 row in set (0.00 sec)

注意:这里记住File的值:mysql-bin.000008和Position的值:107,后面会用到。

根据主从复制原理,从库想要和主库同步,必须要有一个连接的帐号,这个帐号是要在主库上创建的。

授权可以来读取日志文件的用户

mysql>GRANT REPLICATION SLAVE ON . TO 'zhu'@'192.168.0.71' IDENTIFIED BY '123456';

REPLICATION SLAVE为mysql的必须权限,此处不要ALL。

.表示所有库和表,此处也可以指定具体的库和表。例如aaa库的bbb表:aaa.bbb

'zhu'@'192.168.0.71',同步的帐号和授权的主机地址,主机地址可以使用%进行通配。

此处为演示用,密码就设置了123456。

刷新权限,使其生效

mysql>FLUSH PRIVILEGES;

查看zhu帐号是否生效
mysql>SELECT USER,HOST FROM mysql.user;
user host
root 127.0.0.1
zhu 192.168.0.71
root ::1
root localhost
test localhost

为了确保主服务器的账户配置正确,我们在从slave服务器上,登录下master mysql(此处如果连不上,查看是不是防火墙问题)
mysql -uzhu -p123456 -h192.168.0.70

 

slave windows

修改my.ini 原来配置文件中有的话就不用在添加了

[mysqld]
server-id = 2
log-bin=mysql-bin #可以注释掉log-bin,从库一般不开启log-bin功能
relay-log = mysql-relay-bin #中继日志,可注释掉
expire_logs_days = 7 #自动清理7天前的日志,前面如果注释了,此处也不用添加了,注释掉吧
read_only = on #只读
replicate-wild-do-table=whsir.% #指定复制的库和表,此处%表示通配所有,见附录9

my.ini配置中一定要配置的就是server-id其他都可以省略掉!!!

配置好my.ini后重启mysql(不知道windows中如何重启mysql的请自行google)

net stop mysql
net start mysql

m3

创建whsir库(我这里做演示用,直接就创建了,没有导入数据)

mysql>CREATE DATABASE whsir;

登录mysql查看server-id的值是否为2
mysql>SHOW VARIABLES LIKE 'server_id';

m4

先停止slave同步,也可以mysql>STOP SLAVE;

mysql>SLAVE STOP;

mysql>CHANGE MASTER TO
->MASTER_HOST='192.168.0.70',
->MASTER_USER='zhu',
->MASTER_PASSWORD='123456',
->MASTER_PORT=3306,
->MASTER_LOG_FILE='mysql-bin.000008',
->MASTER_LOG_POS=107,
->MASTER_CONNECT_RETRY=10;

MASTER_PORT是主服务器端口,默认就是3306。

MASTER_CONNECT_RETRY是连接失败后等待的秒数。

注意上面是分开写的,你也可以写在一行里。

上述操作原理其实是把用户的信息写入到了从库的data/master.info中了

上述配置好后启动slave同步

mysql>SLAVE START;

查看状态G就是结束,再加一个";" 就多余了,如果加上;会报错
mysql>SHOW SLAVE STATUSG

m5

如果看到Slave_IO_Running和Slave_SQL_Running都是Yes,Seconds_Behind_Master:0,表示主从服务器已经配置成功

Slave_IO_Running是IO的线程状态,IO线程负责从slave库到master库读取binlog日志,并写入到slave的中继日志(relay-log),Yes表示IO线程工作正常。

Slave_SQL_Running是SQL的线程状态,SQL线程负责读取中继日志(relay-log)中的数据并转换为SQL语句应用到slave库中,Yes表示SQL线程工作正常。

Seconds_Behind_Master是复制过程中,slave库比master库延迟的秒数。

 

附录:

1、从服务器遇到错误:ERROR 1201 <HY000>: Could not initialize master info structure; more error messages can be found in the mysql error log
错误原因是因为从数据库之前已经做过主从复制了,所以要先停止从库,再进行从库设置。
解决方法:
mysql>stop slave;
mysql>reset slave;
mysql>CHANGE MASTER TO
mysql>MASTER_HOST='192.168.0.70',
mysql>MASTER_USER='zhu',
mysql>MASTER_PASSWORD='123456',
mysql>MASTER_PORT=3306,
mysql>MASTER_LOG_FILE='mysql-bin.000008',
mysql>MASTER_LOG_POS=107,
mysql>MASTER_CONNECT_RETRY=10;

2、从服务器Slave_SQL_Running:No
出现问题原因:
可能slave服务器重启导致
也可能是在slave进行了写操作
解决办法一:
mysql>slave stop;
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;
解决办法二:
查看master服务器File和Position值,需要停止master的写操作。
mysql>SHOW MASTER STATUS;
在从服务器上停掉slave服务
mysql>slave stop;
然后在执行下面,注意更改File和Position值
mysql>CHANGE MASTER TO
mysql>MASTER_HOST='192.168.0.70',
mysql>MASTER_USER='zhu',
mysql>MASTER_PASSWORD='123456',
mysql>MASTER_PORT=3306,
mysql>MASTER_LOG_FILE='mysql-bin.000008',
mysql>MASTER_LOG_POS=107,
mysql>MASTER_CONNECT_RETRY=10;
开启slave服务
mysql>slave start;

3、如果服务器的mysql已经在跑着了,需要先锁定数据库防止写入并导出数据库。
mysql>FLUSH TABLES WITH READ LOCK; #master锁定数据库防止写入,锁表后再开一个SSH进行备份操作(当前窗口不要动)。
mysqldump -u root -p123456 --all-databases --lock-tables=false > /root/all.sql #master导出数据库
mysql -u root -p123456 < /root/all.sql #slave服务器导入数据
mysql>UNLOCK TABLES; #master解锁表

4、Slave_IO_Running: No遇到了几次这个问题,最后发现是主服务器防火墙挡住了,关闭主服务器的防火墙(或者自行添加规则),在从服务器上
mysql>slave stop;
mysql>slave start;

5、查看只读状态:show global variables like "%read_only%";

修改只读状态:set global read_only=off;或set global read_only=on;

6、重启mysql不会影响主从服务,还是尽量避免重启。

7、binglog日志自动清理
在my.ini或my.cnf中设置expire_logs_days = 7
表示二进制日志自动删除的天数,0则是不自动删除。
可以通过show variables like '%log%';查看
其中这一行就是自动删除的天数expire_logs_days | 7

8、master的SHOW MASTER STATUS;没有返回结果,检查下master的binlog配置是否正确。
mysql>SHOW VARIABLES LIKE 'log_bin';

9、relicate-wild-ignore-table是复制过滤选项,可以过滤不需要复制的数据库或表,例如:relicate-wild-ignore-table=mysql.%
replicate-wild-do-table用来指定需要复制的数据库或表,例如:replicate-wild-do-table=test.%
过滤多个,就多写一行。

注意:不要在主库上使用binlog-do-db或binlog-ignore-db选项,也不要在从库上使用relicate-do-db或relicate-ignore-db选项,因为这样可能会产生跨库更新失败的问题,推荐直接在从库上使用replicate-wild-do-table和relicate-wild-ignore-table两个选项来解决复制过滤的问题。

不停止mysql服务配置主从https://blog.whsir.com/post-606.html

windows 2008 安装mysql5.5.54https://blog.whsir.com/post-532.html

linux修改mysql字符集编码https://blog.whsir.com/post-487.html

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
10月前
|
Ubuntu Unix Linux
在Windows上轻松安装和使用Ubuntu的方法详解
继续点击“Continue”按钮以继续安装流程,随后选择清理磁盘并安装操作系统的选项。 接下来,在安装过程中,你需要选择时区。为了与你的地理位置相匹配,请选择中国上海作为你的时区设置。 在安装过程中,你还需要设置计算机的名称以及账号密码。请务必牢记这些信息,因为它们将作为你登录系统的凭证。
|
12月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1659 1
|
11月前
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
9月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
2162 16
|
9月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1251 0
|
10月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
892 10
|
10月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
731 10
|
11月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
507 11
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。
|
10月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1549 69