前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊一聊mycat数据库集群系列之双主双重实现

聊一聊mycat数据库集群系列之双主双重实现

作者头像
小小许
发布于 2020-08-20 03:06:52
发布于 2020-08-20 03:06:52
98500
代码可运行
举报
文章被收录于专栏:angularejs学习篇angularejs学习篇
运行总次数:0
代码可运行

  最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考。本次系列终结大概包括以下内容:多数据库安装、mycat部署安装、数据库之读写分离主从复制、数据库之双主多重、数据库分库分表。每一个点,有可能会对应一篇或者多篇文章,由于还要继续上班工作,所以本系列分享预计持续时间需要10天左右,有兴趣的您可以持续关注。我是一个菜鸟,如果写的不好的地方,望多多指点和包涵。

  好了,不逼逼了,直接进入本次的主题:mycat双主双重实现。在前的几篇文章中,我们已经完整的介绍了主从备份,读写分离实现。但是在实际生产中,为了系统的高可用,主从备份是远远不够用的,比如:要是主挂了,那么整个系统的写数据都挂了,如果读数据库挂了,那怎么整个系统的读操作也就挂了,为了实现系统的高可用,在实际项目中,我们会搭建至少搭建双主多重。

一、简介

  数据库集群的方式有多种 ,前面的介绍的一种是主从复制,读写分离,这一种方式在一般的系统已经够用了,但是对系统可用性要求很高的系统,这样是会有缺陷的,原因是:主只有一个,万一主挂了呢?那系统的所有读操作都将被中断,系统不能提供写服务,当重挂了,系统不同提高读服务,所以无论那一台数据库挂了,系统都会受到影响。对于高可用的系统,那是不行的,比如:电商系统等等。不急不急,其实也很简单,一台不够,那就多台就解决问题了:双主多重,双主:主要指的是两台主机(一主一备),两台主机相互间要同步数据,其中一台挂了另外一台可以正常运行。这样能够大大提升系统的高可用。

  本次以双主4重来做实例练习,在同一台服务器上,通过不同端口来区分不同的数据库,具体的数据配置如下:

服务器名称

端口

备注

Master_3306

3306

第一台主机,需要和第二台主机(主备机)同步数据

Slave1_3307

3307

第一台主机对应的第一台重机

Slave1_3308

3308

第一台主机对应的第二台重机

Master_3309

3309

第二台主机(主备机),需要和第一台主同步数据

Slave1_3310

3310

第二台主机对应的第一台重机

Slave1_3311

3311

第二台主机对应的第二台重机

二、数据库环境准备

双主多重的在原理上,和上一篇说的主从备份的原理都是一样的,双主双从只是在原来的基础上,针对主机和重机都增加了对于的备机。主机的有两个数据库实例,其实两个的主备的角色是相互的,当一台机器挂了,另外一台机器就充当了主机。所以最终数据的体现效果就是,所有主机和从机都要保持数据一致。为了达到这一目录,在备份上需要策略如下:两台主机间都要相互同步、每一台主机对于的重机都需要同步对应的主机数据。最终的数据同步关系为:

  • 3306 与 3307 相互数据同步
  • 3308、3309 都要同步3306的数据
  • 3310、3311 都要同步3307的数据

  在配置文件上和上一篇的配置原理一样,只是针对两个主机需要新增一个配置节点:log-slave-updates:在作为从库的时候,有写入操作也要更新二进制文件。

下面简单罗列每一个数据库的my.ini的配置文件

3306配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Client]
port = 3306
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3306
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3306\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 主从复制设置
# 设置服务id,注意改id值在同一个数据库集群中要保持唯一
server-id = 3306
# 写入磁盘策略 该参数的有效值有 012
# 默认值为1,在实际使用过程中,为了效率,我们一般会在设置为2
innodb_flush_log_at_trx_commit=2  
# 开启binlog日志同步功能
# 这个参数直接影响mysql的性能和完整性。
sync_binlog=0
# 在作为从库的时候,有写入操作也要更新二进制文件
log-slave-updates
# 二进制日志保留天数
expire_logs_days=180
# binlog日志文件名(可以任意命名)
log-bin=mysql-bin
# 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
# 表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_offset=1
# 在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为12.
# 这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
# 同步的数据库设置方式有两种:
# binlog_do_db:设置需要同步的数据库
# binlog-ignore-db:设置不需要同步的数据库
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
# binlog_do_db=testdb 
#不同步数据库,除此之外都同步
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3307置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Client]
port = 3307
[mysqld]
#设置3307端口
port = 3307
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3307
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0_3307\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 主从复制设置
# 设置服务id,注意改id值在同一个数据库集群中要保持唯一
server-id = 3306
# 写入磁盘策略 该参数的有效值有 012
# 默认值为1,在实际使用过程中,为了效率,我们一般会在设置为2
innodb_flush_log_at_trx_commit=2  
# 开启binlog日志同步功能
# 这个参数直接影响mysql的性能和完整性。
sync_binlog=0
# 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
auto_increment_increment=2
# 表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_offset=2
# 在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为12.
# 这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
# 在作为从库的时候,有写入操作也要更新二进制文件
log-slave-updates
# 二进制日志保留天数
expire_logs_days=180
# binlog日志文件名(可以任意命名)
log-bin=mysql-bin
# 同步的数据库设置方式有两种:
# binlog_do_db:设置需要同步的数据库
# binlog-ignore-db:设置不需要同步的数据库
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
# binlog_do_db=testdb 
#不同步数据库,除此之外都同步
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3308配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Client]

port = 3308

 

[mysqld]

#设置3308端口

port = 3308

# 该id主要要保持唯一,后面在设置主从同步的时候会用到

server-id = 3308

# 设置mysql的安装目录

basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3308

# 设置mysql数据库的数据的存放目录

datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3308\data

# 允许最大连接数

max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

 

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

3309配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Client]
port = 3309
 
[mysqld]
#设置3309端口
port = 3309
# 该id主要要保持唯一,后面在设置主从同步的时候会用到
server-id = 3309
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3309
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3309\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3310配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Client]
port = 3308
 
[mysqld]
#设置3310端口
port = 3310
# 该id主要要保持唯一,后面在设置主从同步的时候会用到
server-id = 3310
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3310
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3310\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

3311配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Client]
port = 3311
 
[mysqld]
#设置3311端口
port = 3311
# 该id主要要保持唯一,后面在设置主从同步的时候会用到
server-id = 3308
# 设置mysql的安装目录
basedir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3311
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files (x86)\MySQL\MySQL Server 8.0.21_3311\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

三、数据库配置验证

  数据库双主多重配置验证,主要验证两个主机数据更新是否所有集群中的是所有数据是否都发送对应的改变,如果发送说明配置成功。

  1、 在3306中创建一个数据test和一个表user

  查看其它的库是否都创建了一个库test和一个表user

  2、 在3307中对表user插入一条数据

  查看其余所有库对于的表是否也新增了该数据

四、mycat双主多从配置

Mycat的使用配置,我们先从最简单的模式(主从复制)开始配置起走。Mycat主从复制主要配置文件有如下两个文件,两个文件都在mycat目录\conf下。

  • server.xml: 配置文件包含了mycat的系统配置信息
  • schema.xml:涵盖了mycat的逻辑库,表,分片规则,分片节点及数据源。

server.xml配置文件

server.xml主要涉及到两个标签的配置,和上一篇的主重复制一样:

  • system标签:主要配置系统相关的配置,在此不在做详细的描述,根据实际需要在去配置;
  • user标签:主要用于定义登录mycat的用户和权限,这也是本次需要介绍的配置节点。user标签可以同时配置多个节点。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--配置mycat连接用户信息-->
<!--name:用户名-->
<user name="root" defaultAccount="true">
    <!--password:用户登录密码-->
    <property name="password">xuyuanhong</property>
    <!--password:mysql对应的逻辑库名称,如果有多个库,那么不同的库之间通过,连接-->
    <property name="schemas">test</property>
</user>

schema.xml配置文件

schema配置相对上一篇的主从复制的配置节点,只是将负载均衡节点balance的值改为1,同时在服务上新增一个主节点,同时新增一个从节点,其余配置不变,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    
    <!--schema:mycat整个数据库的映射框架配置,每一个mycat逻辑库需要一个对于的配置节点-->
    <!--name:mycat的逻辑库名称,和sercer.xml中的逻辑库名称保持一致-->
    <!--checkSQLschema:是否检测SQL,如果设置为 true,那么mycat会对传递的SQL做优化,主要去掉指定库名称,反之则不做任何处理,一般情况下设置false-->
    <!--sqlMaxLimit:最大连接数-->
    <!--dataNode:主要配置逻辑库和实际库的映射关系,会有一个专门的节点来配置,此处指需要绑定对于的映射关系名称即可-->
    <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dntest">
    </schema>
    
    <!--dataNode:配置mycat逻辑库和实际库的映射关系-->
    <!--name:映射关系名称,要和上面的schema对应的dataNode节点名称保持一致-->
    <!--database:实体库映射的真实数据库名称-->
    <!--dataHost:具体的数据库连接属性节点名称-->
    <dataNode name="dntest" database="test" dataHost="hosttest" />
    
    <!--dataHost:配置数据库的连接信息和路由规则信息-->
    <!--name:数据连接地址信息名称,语上面的dataNode节点中的dataHost名称对应-->
    <!--maxCon:指定每个读写实例连接池的最大连接-->
    <!--minCon:指定每个读写实例连接池的最小连接,初始化连接池的大小-->
    <!--balance:查询操作负载均衡类型,目前的取值有以下4种
        balance=0: 不开启读写分离,所有读操作都发送到当前可用的writeHost上。
        balance=1: 全部的readHost与Stand by writeHost都参与select语句的负载均衡,
            简而言之,当双主双从模式(M1->S1, M2->S2,并且M1M2互为主备)时,在正常情况下,M2S1S2都参与select的负载均
        balance=2: 所有的读操作都随机在writeHost,readHost上分发。
        balance=3: 所有的读请求都随机分配到writeHost对应的readHost上执行,writeHost不负担读压力,注意balance=3只在mycat1.4之后版本中有效。
        在实际使用中,针对读写分离模式,我们一般都配置为3
    -->
    <!--writeType:写操作负载均衡类型,目前的取值有3种:
        writeType=0, 所有写操作都发送到可用的writeHost上。
        writeType=1”,所有写操作都随机的发送到readHost。
        writeType=2”,所有写操作都随机的在writeHost、readhost分上发。
        毫无疑问,在实际使用过中,都会配置为0
    -->

五、mycat启动及其常用操作命令

  • 首先需要进入到mycat安装目录的bin目录下
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd E:\Program Files\mycat\bin
  • 开启mycat
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mycat.bat start
  • 停止mycat
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mycat.bat stop
  • 重启mycat
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mycat.bat restart
  • 查看mycat状态
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mycat.bat status

六、mycat中遇到的问题解决

其实在实际mycat配置时,我也不是一次配置成功的,也遇到了两个小问题,现在罗列出来,如果刚刚你也遇到了正好可以解决掉。

1、Unrecognized VM option 'AggressiveOpts'

  解决方式:打开wrapper.conf配置文件,找到AggressiveOpts并将整行注释掉即可,如下图所示:

2、Could not create the Java Virtual Machine.

  该问题有可能是设置才内存超出本地环境实际内存,处理方式也简单,直接将wrapper.conf对应的内存改小即可。如下图位置:

  有关mycat的部署安装、读写分离就分享到这儿了,下一篇将和大家一起分享mycat的多主多重配置,有兴趣的小伙伴,可以持续关注,谢谢!

好了,到目前为止,针对数据库的主从复制、算主多重的部署从头到尾的每一步都做了一个总结。在后续的文章中就要开始对数据库的分库分表进行梳理回顾。有兴趣的朋友,可以持续关注,谢谢支持。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
SASS相关知识
Sass(Syntactically Awesome Style Sheets)是一种CSS预处理器,用于增强CSS的功能和灵活性。它扩展了CSS,并引入了许多有用的功能,如变量、嵌套、混合、继承以及模块化的结构。
FGGIT
2024/12/20
1400
前端架构师技术之Sass
CSS 仅仅是一个标记语言,不是编程语言,因此不可以自定义变量,也不可以引用。CSS 主要有以下缺点。
张哥编程
2024/12/13
1090
【Sass/SCSS】预加载器中的“轩辕剑”
博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 随着前端技术发展的越来越迅速,前端的样式也需要更加贴近时代的审美,那么CSS就需要承担更多的工作,(强调!这不是煽情!这是宣讲背景。😄),为了给CSS怼上去,预加载器出现了,没错,CSS用上了武器。Sass/SCSS——预加载器中的“轩辕剑”,这也不是我帮它吹,是它自己说的,下图为例。 官网地址:SASS中文网 什么是Sass,它与SCSS是啥关系 感觉这里有点绕,这是怎么回事,
用户4268038
2021/11/18
8620
CSS预处理器入门:Sass/SCSS的实用指南
随着网页开发越发复杂,CSS 的可维护性也越显重要,但在 CSS 语法仍然受限的状况下,发展出了 CSS Preprocessor(CSS 预处理器)来扩展更多的写法。
写bug的高哈哈
2025/01/26
3730
CSS预处理器入门:Sass/SCSS的实用指南
CSS预处理器的对比 — sass、less和stylus
本文根据Johnathan Croom的《sass vs. less vs. stylus: Preprocessor Shootout》所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout/,以及作者相关信息 ——作者:Johnathan Croom
laixiangran
2018/04/11
4.7K0
CSS预处理器的对比 — sass、less和stylus
Sass常用语法
选择所有跟在article后的同层article元素,不管它们之间隔了多少其他元素:
码客说
2024/07/26
1280
如何使用SASS编写可重用的CSS
Sass 是一个CSS预处理程序,至今使用广泛,它之所以流行,是因为它修复了几个CSS缺陷:
前端小智@大迁世界
2022/06/15
8K0
如何使用SASS编写可重用的CSS
Sass(Scss)、Less的区别与选择 + 基本使用
Sass(Scss)、Less 都是 CSS 预处理器,他们定义了一种新的语言,其基本思想是,用一种专门的编程语言为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行 CSS 的编码工作。
老猫-Leo
2023/12/11
1.9K0
前端入门23-CSS预处理器(Less&Sass)声明正文-CSS预处理(less&Sass)
这里就讲讲这两个问题,写过 CSS 应该就会比较清楚,虽然我才刚入门,但在写一些练手时就已经有点感觉了:写 CSS 后,很难维护,维护基本要靠注释来,而且由于 HTML 文档中标签的嵌套层次复杂,导致写 CSS 的选择器时也很费劲,尤其是在后期为某部分标签新增样式时,总会不知道到底应该在 CSS 文件中哪里写这个选择器,这个选择器是否会与前面冲突。
请叫我大苏
2018/12/26
1.7K0
Sass/SCSS 简明入门教程
Sass(Syntactically Awesome StyleSheets) 是 CSS 的一种扩展,是 CSS的 超集(通过编译生成浏览器可以处理传统 CSS)。Sass 的出现是为了解决在大型项目中传统 CSS 会遇到的重复、可维护性差等问题(添加了嵌套的规则、变量、mixins、选择器继承等特性)。让开发者可以编写简洁、富语意(expressive )、可复用、可维护性和可延展性性佳的 CSS 代码。
疯狂的技术宅
2021/03/16
3K0
Sass/Scss、Less 是什么?
Sass (Syntactically Awesome Stylesheets) 是一种动态样式语言,Sass 语法属于缩排语法,比 css 比多出好些功能 (如变量、嵌套、运算,混入 (Mixin)、继承、颜色处理,函数等),更容易阅读。
CRMEB商城源码
2022/08/02
1.3K0
Sass:强大而灵活的CSS预处理器详解
在前端开发的世界里,CSS(层叠样式表)作为样式描述语言,为我们提供了丰富的样式定义和布局方式。然而,随着项目规模的不断扩大和复杂度的提升,原生CSS的编写和维护逐渐变得繁琐。为了解决这个问题,Sass(Syntactically Awesome Stylesheets)作为CSS的预处理器应运而生,它为我们提供了许多强大的功能和工具,使得CSS的编写更加高效和灵活。
九转成圣
2024/05/14
4250
CSS 预编译语言 Sass 快速入门教程
CSS 作为一门样式语言,语法简单,易于上手,但是由于不具备常规编程语言提供的变量、函数、继承等机制,因此很容易写出大量没有逻辑、难以复用和扩展的代码,在日常开发使用中,如果没有完善的编码规范,编写的 CSS 代码会非常冗余且难以维护。
学院君
2020/10/30
7.4K0
CSS 预编译语言 Sass 快速入门教程
Sass 快速入门学习
  众所周知css并不能算是一们真正意义上的“编程”语言,它本身无法未完成像其它编程语言一样的嵌套、继承、设置变量等工作。
笔阁
2018/09/04
1.2K0
Sass 快速入门学习
Sass-学习笔记【基础篇】
最下边附结构图 在线编辑器网址如下:http://sassmeister.com/  注意编写的时候,符号千万别用了中文的:、;、。...之类的,会报错,Sass也转换不成css。 less和sass的区别: 博客园文章—http://www.cnblogs.com/wangpenghui522/p/5467560.html 本章主要内容:变量 、混合宏 、继承 、占位 、插值 、运算 、数据类型 1:定义 Sass是css预处理器的一种,也是最早的css预处理语言。Sass采用Ruby语言编写,为css增
xing.org1^
2018/05/17
5.1K0
sass 基础——回顾
1.webstorm 自动编译SASS   下载安装包 http://rubyinstaller.org/downloads/   然后点击安装,路径为默认路径就行, 勾选以下两项     add Ruby executables to your PATH     Associate .rb and rbw files with this Ruby information   安装完,打开命令行 输入 gem install sass   webstorm 配置 点击setting选择tool下的f
用户1197315
2018/01/22
1.1K0
sass 基础——回顾
vue2.0以上版本安装sass(scss)
1、异同:1)简言之可以理解scss是sass的一个升级版本,完全兼容sass之前的功能,又有了些新增能力。语法形式上有些许不同,最主要的就是sass是靠缩进表示嵌套关系,scss是花括号
IT工作者
2022/02/17
2.7K0
SASS详解@mixins/@include/@extend/@at-root
Sass 支持所有CSS3的 @规则,以及一些已知的其他特定的Sass "指令"。这些在 Sass 都有对应的效果,更多资料请查看 控制指令 (control directives) 。今天重点讲mixins/include/extend
周陆军博客
2023/05/14
1.2K0
【Sass学习笔记】001-Sass简介
CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。
訾博ZiBo
2025/01/06
1720
Sass 基础(一)
  css 是一些非常简单得语句的组合,既然简单的语句,就不可避免的有很多重复的,冗余的东西,而且没有传统 编程语言变量,控制语句等高级特性,所以造成了css 编写低效,往往需要查找替换,大量复制来修改或者编写。Sass 是用 弥补这些缺陷的,使开发更加的方便快捷,更加方便管理。   1.Sass和SCSS的区别。     文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名     语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带
用户1197315
2018/01/19
8280
相关推荐
SASS相关知识
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 一、简介
  • 二、数据库环境准备
    • 3306配置文件
    • 3307置文件
    • 3308配置文件
    • 3309配置文件
    • 3310配置文件
    • 3311配置文件
  • 三、数据库配置验证
  • 四、mycat双主多从配置
    • server.xml配置文件
    • schema.xml配置文件
  • 五、mycat启动及其常用操作命令
  • 六、mycat中遇到的问题解决
    • 1、Unrecognized VM option 'AggressiveOpts'
    • 2、Could not create the Java Virtual Machine.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档