<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>数据库 on bugwang</title>
    <link>https://bugwang.cn/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/</link>
    <description>Recent content in 数据库 on bugwang</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-ch</language>
    <lastBuildDate>Thu, 13 Jun 2024 17:27:36 +0800</lastBuildDate><atom:link href="https://bugwang.cn/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>MySQL常用工具总结</title>
      <link>https://bugwang.cn/posts/mysql%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E6%80%BB%E7%BB%93/</link>
      <pubDate>Thu, 13 Jun 2024 17:27:36 +0800</pubDate>
      
      <guid>https://bugwang.cn/posts/mysql%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E6%80%BB%E7%BB%93/</guid>
      <description>MySQL常用工具总结 - mysql -P：指定端口
[mysqld] port=端口号 -e：在终端执行SQL，不用登录，主要用于一些脚本程序
mysql -uroot -p1234 -h127.0.0.1 -P3306 -e&amp;#34;select * from user&amp;#34; db1 - mysqladmin 执行管理操作的工具
# 用法 mysqladmin [OPTIONS] command command.... # 创建库 mysqladmin -uroot -p1234 create db2 # 删除库 mysqladmin -uroot -p1234 drop db2 # 修改密码 mysqladmin -uroot -p1234 password 5678 # 查看更多用法 mysqladmin --help - mysqlshow 客户端对象查看工具
&amp;ndash;count：统计
-i：详细信息
mysqlshow -uroot -p1234 [OPTIONS] [database [table [column]]] - mysqldump -B, &amp;ndash;databases：备份多个数据库
-A, &amp;ndash;all-databases：备份所有数据库
&amp;ndash;add-drop-database：创建库之前，增加删除库语句</description>
    </item>
    
    <item>
      <title>SQLAlchemy快速上手</title>
      <link>https://bugwang.cn/posts/sqlalchemy%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/</link>
      <pubDate>Tue, 04 Jun 2024 11:22:01 +0800</pubDate>
      
      <guid>https://bugwang.cn/posts/sqlalchemy%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/</guid>
      <description>SQLAlchemy 演示插入数据代码
import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String from sqlalchemy.orm import sessionmaker #创建对象的基类： Base = declarative_base() #定义User对象： class User(Base): #表的名字： __tablename__ = &amp;#39;user&amp;#39; #表的结构: userid = Column(Integer,primary_key=True) username = Column(String(20)) age = Column(Integer) department = Column(String(20)) #初始化数据库连接 engine = create_engine(&amp;#34;mysql+pymysql://kang:123456@10.3.152.35/test&amp;#34;,encoding=&amp;#34;utf-8&amp;#34;,echo=True) #创建session类型 DBSession = sessionmaker(bind=engine) #创建session对象 session = DBSession() #创建新的user对象 new_user1 = User(username=&amp;#39;CC&amp;#39;,age=25,department=&amp;#39;IT&amp;#39;) new_user2 = User(username=&amp;#34;LILI&amp;#34;,age=30,department=&amp;#39;HR&amp;#39;) new_user3 = User(username=&amp;#39;JOHN&amp;#39;,age=22,department=&amp;#39;IT&amp;#39;) #添加单条数据（添加数据，但还没有提交，出错还可以使用rollback撤回操作） new_user = User(name=&amp;#39;lily&amp;#39;) #session.</description>
    </item>
    
    <item>
      <title>MongoDB：副本集读写分离搭建</title>
      <link>https://bugwang.cn/posts/mongodb%E5%89%AF%E6%9C%AC%E9%9B%86%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Wed, 01 Mar 2023 18:54:09 +0800</pubDate>
      
      <guid>https://bugwang.cn/posts/mongodb%E5%89%AF%E6%9C%AC%E9%9B%86%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB%E6%90%AD%E5%BB%BA/</guid>
      <description>背景知识 副本集（Replica Set，replSet，复制集）具有自动故障恢复的功能。主从集群和副本集最大的区别就是副本集没有固定的主节点，整个集群会选出一个主节点，当其挂掉后，会在剩下的副节点中选中一个作为主节点，副本集中总有一个活跃节点(primary)和多个备份节点(secondary)。
MongoDB官方已经不建议使用主从模式，代替的方案是采用副本集的模式。
主从模式 其实就是一个单副本的应用，没有很好的扩展性和容错性，而MongoDB副本集具有多个副本保证了容错性，即使一个副本挂掉了还有多个副本存在，主节点挂掉后，整个集群内会实现自动切换
副本集工作原理 客户端连接到整个MongoDB副本集，不关心具体哪一台节点是否挂掉。主节点负责整个副本集的读写，副本集定期同步数据备份，一旦主节点挂掉，副节点就会选举一个新的主节点，而这一切对于应用服务器不需要任何关心。
副本集中副节点在主节点挂掉后通过心跳机制检测到后，就会在副本集内发起主节点的选举机制，自动选举一位新的主节点。
官方推荐的MongoDB副本集机器数量为至少 3 个，即：一主两副
环境准备 因为主机数量有限，这里只用两个副本集部署演示，两台主机：Centos
ip地址 主机名 角色 192.168.198.140 mongo-master 副本集主节点 192.168.198.142 mongo-slave 副本集副节点 关闭防火墙：
systemctl stop firewalld systemctl disable firewalld 安装MongoDB 安装 wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.8.tgz tar -zvxf mongodb-linux-x86_64-rhel70-4.2.8.tgz mv mongodb-linux-x86_64-rhel70-4.2.8 /usr/local/mongodb cd /usr/local/mongodb mkdir conf data logs touch conf/mongodb.conf touch logs/mongodb.log mkdir -p data/db 编写MongoDB配置文件mongodb.conf #数据存储路径 dbpath=/usr/local/mongodb/data/db #日志存储文件 logpath=/usr/local/mongodb/logs/mongodb.log #运行端口 port= 27017 #守护进程的方式运行MongoDB，创建服务器进程 fork=true #使用追加的方式写日志 logappend=true # 绑定服务IP，若绑定127.0.0.1，则只能本机访问，不指定默认本地所有IP bind_ip= 192 .168.198. #使用此设置来配置复制副本集。指定一个副本集名称作为参数，所有主机都必须有相同的名称作为同一个副本集 replSet=repset 启动 [root@mongo-master mongodb]# .</description>
    </item>
    
    <item>
      <title>MongoDB笔记：基本介绍</title>
      <link>https://bugwang.cn/posts/mongodb%E7%AC%94%E8%AE%B0%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D/</link>
      <pubDate>Wed, 08 Sep 2021 18:26:04 +0800</pubDate>
      
      <guid>https://bugwang.cn/posts/mongodb%E7%AC%94%E8%AE%B0%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D/</guid>
      <description>MongoDB笔记：基本介绍 简介:
MongoDB 是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品。
跟关系型数据库的一些概念对比
SQL术语/概念 MongoDB术语/概念 说明 database database 数据库 table collection 表/集合 row document 行/文档 column field 字段/域 index index 索引 内存管理
MongoDB使用的是内存映射存储引擎，把磁盘文件的一部分或全部内容直接映射到内存，这样文件中的信息位置就会在内存中有对应的地址空间，内存中主要存储索引+热数据，Mongodb没有单独的内存管理机制，跟随当前的操作系统的内存管理。
Python操作Mongodb 主流的操作mongodb模块 pymongo
安装 pip install pymongo
创建连接对象
from pymongo import MongoClient class MongoDBClient(object): def __new__(cls): if not hasattr(cls, &amp;#39;instance&amp;#39;): cls.instance = super(MongoDBClient, cls).__new__(cls) return cls.instance def __init__(self): self.params = { &amp;#39;host&amp;#39;: &amp;#39;localhost&amp;#39;, &amp;#39;port&amp;#39;: 27017, &amp;#39;connect&amp;#39;: False, &amp;#39;maxPoolSize&amp;#39;: 2000, &amp;#34;authSource&amp;#34;: &amp;#39;workbench&amp;#39;, # 验证数据库 &amp;#34;username&amp;#34;: &amp;#39;cnns&amp;#39;, # 用户名 &amp;#34;password&amp;#34;: &amp;#39;密码&amp;#39; # 密码 } self.</description>
    </item>
    
    <item>
      <title>Alembic数据库迁移工具使用</title>
      <link>https://bugwang.cn/posts/alembic%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/</link>
      <pubDate>Fri, 04 Jun 2021 10:56:51 +0800</pubDate>
      
      <guid>https://bugwang.cn/posts/alembic%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/</guid>
      <description>背景 在很多时候，在我们设计好模型之后，又需要进行一定的改变和更新数据操作；最直接的方式就是删除原来的旧表，但我们之前的数据也会删除；究其原因是我们不能精确记住每个修改和对应DDL，这时候就需要数据库迁移框架了。
对于Django ，框架内部就集成了数据库迁移模块，我们可以很方便使用
回顾Django迁移命令： 基本语法： python manage.py xx [app_name] xx如下： migrate，负责应用和撤销迁移。 makemigrations，基于模型的修改创建迁移。 sqlmigrate，展示迁移使用的 SQL 语句。 showmigrations，列出项目的迁移和迁移的状态。 Django迁移过程分为3步走： 1:修改models数据模型 2:生成迁移文件（在migrations/文件夹下）python manage.py makemigrations 3:向数据库执行迁移操作：python manage.py migrate 总结，迁移数据库的主要思路： 1：修改数据模型 2：生成新迁移文件 3：执行迁移 那么在Flask + SQLAlchemy下，如何选择数据库管理迁移工具？
Alembic介绍 Alembic是Sqlalchemy的作者就已经实现的一个数据库版本化管理工具：
Alembic来帮助我们实现数据库的迁移，数据库迁移工具可以在不破坏数据的情况下更新数据库表的结构。蒸馏器（Alembic）是炼金术士最重要的工具，要学习SQL炼金术（SQLAlchemy），当然要掌握蒸馏器的使用。
Alembic 是一个处理数据库更改的工具，它利用 SQLAlchemy 来实现形成迁移。因为 SQLAlchemy 只会在我们使用时根据 metadata create_all 方法来创建缺少的表 ，它不会根据我们对代码的修改而更新数据库表中的列。它也不会自动帮助我们删除表。 Alembic 提供了一种更新 / 删除表，更改列名和添加新约束的方法。因为 Alembic 使用 SQLAlchemy 执行迁移，它们可用于各种后端数据库。
快速上手 # 安装alembic pip install alembic # 初次使用时，需要初始化，创建迁移环境和 alembic.ini 文件、env.py文件 alembic init migrations # 修改alembic.ini配置，改变 sqlalchemy.url 值，配置数据库连接。 sqlalchemy.</description>
    </item>
    
  </channel>
</rss>
