问题导入
- 在之前项目的基础功能实现中,后台管理和移动端在进行数据访问的时候,都是直接操作数据库MySQL。此时的系统有且仅有一台MySQL服务器,则可能会出现如下问题
- ①、读和写所有压力都由一台数据库承担,压力大
- ②、数据库服务器磁盘损坏导致数据丢失,单点故障
- 解决方案
- 很简单,一台服务器撑不住,那就多台服务器
- 为了解决上述提到的两个问题,我们可以准备两台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库的数据变更(写、更新、删除这些操作),需要同步到从库中(主从复制)。而用户在访问我们项目时,如果是写操作(insert、update、delete),则直接操作主库;如果是读(select)操作,则直接操作从库(在这种读写分离的结构中,从库是可以有多个的),这种结构我们称为读写分离 。
PS:MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具
二进制日志
- 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复有着极其重要的作用,MySQL的主从复制,就是通过binlog实现。默认MySQL是未开启该日志的

Step1:
准备两台服务器(没条件可以使用虚拟机),并且在服务器中安装MySQL,服务器的信息如下所示
| 数据库 | IP地址 | 数据库版本 |
|---|---|---|
| Master(主库) | 192.168.222.135 | 5.7.25 |
| Slave(从库) | 192.168.222.140 | 5.7.25 |
PS:虚拟机克隆结束之后,还需要更改克隆机子的IP地址
①、cd /etc/sysconfig/network-scripts ②、vim ifcfg-ens33 ③、修改IPADDR字段的值为为另一个自己网关的ip地址
Step2
开放3306端口,或者关闭防火墙
方式一:开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent // 永久开放3306端口
firewall-cmd --zone=public --list-ports // 查看端口是否开放
方式二:关闭防火墙
system stop firewalld // 关闭防火墙
system disable firewalld // 关闭开机自动启动
Step3
systemctl start mysqldStep1:修改MySQL数据库的配置文件/etc/my.cnf
log-bin=mysql-bin #启用二进制日志
server-id=200 #设置服务器的唯一id
上述配置需要配置在mysqld下

Step2:重启MySQL服务
systemctl restart mysqldStep3:创建数据同步的用户并授权
前置工作:查看数据库的密码复杂程度

登录MySQL,并执行如下指令,创建用户并授权
GRANT REPLICATION SLAVE ON *.* to 'coolman'@'%' identified by 'Root@root';

这句SQL的作用是创建一个用户coolman,密码为Root@root,并且给该用户授予REPLICATION SLAVE权限。常用于建立复制时候所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
Step4:登录MySQL数据库,查看master同步状态
File和Position的值show master status;
Step1:修改MySQL数据库的配置文件/etc/mycnf
server-id=201 #服务器唯一id

server_uuid是一样的,需要修改,否则会引起冲突
vim /var/lib/mysql/auto.cnf(随意修改后面的字符串即可)
Step2:重启MySQL服务
systemctl restart mysqld :重启服务stop slave; :登录数据库后,停止从库的服务Step3:登录MySQL数据库,设置主库的地址以及同步位置
change master to master_host='192.168.222.135', master_user='coolman', master_password='Root@123', master_log_file='mysql-bin.000001', master_log_pos=440;
start slave; # 开启从库服务


参数说明:
| 参数名称 | 含义 |
|---|---|
| master_host | 主库的IP地址 |
| master_user | 访问主库进行主从复制的用户名(在主库中创建的用户) |
| master_password | 访问主库进行主从复制的用户对应的密码 |
| master_log_file | 指定从哪个日志文件开始同步(上述查询的master状态中的file和position) |
| master_log_pos | 指定从日志文件的哪个位置开始同步 |
Step4:查看从数据库的状态
show slave status \G;
\G表示将查询结果进行按列打印,可以使每个字段打印到单独的行(即将查到的结构旋转90度变成纵向)










文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote
(跟进我之前的问题,Ruby:howcanIcopyavariablewithoutpointingtothesameobject?)我正在编写一个简单的Ruby程序来在.svg文件中进行一些替换。第一步是从文件中提取信息并将其放入数组中。为了避免每次调用此函数时都从磁盘读取文件,我尝试使用memoize设计模式-在第一次调用后的每次调用中都使用缓存结果。为此,我使用了一个在函数之前定义的全局变量。但是,即使我在返回局部变量之前将该变量.dup为局部变量,调用该变量的函数仍在修改全局变量。这是我的实际代码:#memoizetokeepfromhavingtoreadoriginalfi
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。
目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.
我是Ruby的新手。我安装了DataMapper并且正在尝试安装dm-mysql-adapter-1.0.2gem。但是当我尝试安装时,出现以下错误。我正在使用ubuntu操作系统。vinoth@vinoth-laptop:~/Downloads$geminstalldm-mysql-adapter-1.0.2----with-mysql-lib=/usr/lib/mysql----with-mysql-conf=/usr/bin/mysqlWARNING:Installingto~/.gemsince/home/vinoth/gemsand/home/vinoth/gems/bina
我目前正在构建一个需要mysql2gem的RoR项目。我成功安装了gem。因为它出现在我的gem列表中。[root@vc2cmmka035538nsimple_cms]#gemlist***LOCALGEMS***actionmailer(3.2.3)actionpack(3.2.3)activemodel(3.2.3)activerecord(3.2.3)activeresource(3.2.3)activesupport(3.2.14,3.2.3)arel(3.0.2)bigdecimal(1.1.0)builder(3.2.2,3.0.0)bundler(1.1.5)c2c_li