Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 339

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 392

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 394
分类 默认分类 下的文章 - Joyber 的博客

分类 默认分类 下的文章

虚拟机是群晖nas系统的VM虚拟机,创建的时候磁盘分配的是50G,然后某天又编辑了一下虚拟机,将磁盘大小直接修改成了100G
然后重启机器,df -h查看/根目录还是50G,而fdisk -l看到的分区大小是100G(这个应该是之前某人操作过的,不然也不会显示成100G,而还是原来的50G,这个文章的记录的操作就是从现在的状态开始的)

参考文章:http://linux.51yip.com/search/lvextend

#查看分区大小(50G)
df -h

#查看PG物理卷
pvscan 
PV /dev/sda3   VG ubuntu-vg       lvm2 [<99.00 GiB / <49.50 GiB free]
  Total: 1 [<99.00 GiB] / in use: 1 [<99.00 GiB] / in no VG: 0 [0   ]



#查看VG容量(可以看到还有12671没有使用呢)
vgdisplay 
--- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <99.00 GiB
  PE Size               4.00 MiB
  Total PE              25343
  Alloc PE / Size       12672 / 49.50 GiB
  Free  PE / Size       12671 / <49.50 GiB
  VG UUID               hun4gL-bgcZ-KdmW-5rkw-59o5-Miby-2inD5G


#利用 lvresize 的功能來增加LV
lvresize -l +12671 /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from 49.50 GiB (12672 extents) to <99.00 GiB (25343 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.



#显示LV逻辑卷
lvdisplay 
--- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                KGk7ni-kevv-hLrb-e9QS-DSFl-x0S8-d15jWM
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-09-18 14:35:53 +0800
  LV Status              available
  # open                 1
  LV Size                <99.00 GiB
  Current LE             25343
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0



#查看VG容量
vgdisplay
 --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <99.00 GiB
  PE Size               4.00 MiB
  Total PE              25343
  Alloc PE / Size       25343 / <99.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               hun4gL-bgcZ-KdmW-5rkw-59o5-Miby-2inD5G


#查看分区大小(还是50G)
df -h

#LV分区重设大小
resize2fs /dev/ubuntu-vg/ubuntu-lv

#查看分区大小(已经是100G了)
df -h

fdisk -l

补充:后续又增加了400G,一共有500G了,怎么把新增加的400G加到/分区?

fdisk -l
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: iSCSI Storage   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 31F29E60-1C24-4CDD-9855-CD46FB8E21A9

Device       Start       End   Sectors Size Type
/dev/sda1     2048      4095      2048   1M BIOS boot
/dev/sda2     4096   2101247   2097152   1G Linux filesystem
/dev/sda3  2101248 209713151 207611904  99G Linux filesystem


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 98.102 GiB, 106296246272 bytes, 207609856 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes




#思路,先分区,然后把分区的空间扩展到现有的VG,然后再增加LV的容量,最后刷新文件系统的分区大小
#先分区
fdisk /dev/sda
m (帮助菜单)
n (创建新分区,一路按几个回车)
w (保存分区表)
q (退出)




#再查看分区
fdisk -l
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: iSCSI Storage   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 31F29E60-1C24-4CDD-9855-CD46FB8E21A9

Device         Start        End   Sectors  Size Type
/dev/sda1       2048       4095      2048    1M BIOS boot
/dev/sda2       4096    2101247   2097152    1G Linux filesystem
/dev/sda3    2101248  209713151 207611904   99G Linux filesystem
/dev/sda4  209713152 1048575966 838862815  400G Linux filesystem


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 98.102 GiB, 106296246272 bytes, 207609856 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes




#将新分区的空间追加到   ubuntu-vg 这个VG上
vgextend ubuntu-vg /dev/sda4
  Physical volume "/dev/sda4" successfully created.
  Volume group "ubuntu-vg" successfully extended

#可以看到有400G的未使用空间了
pvscan
  PV /dev/sda3   VG ubuntu-vg       lvm2 [<99.00 GiB / 0    free]
  PV /dev/sda4   VG ubuntu-vg       lvm2 [<400.00 GiB / <400.00 GiB free]
  Total: 2 [498.99 GiB] / in use: 2 [498.99 GiB] / in no VG: 0 [0   ]



#vgdisplay
vgdisplay
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               498.99 GiB
  PE Size               4.00 MiB
  Total PE              127742
  Alloc PE / Size       25343 / <99.00 GiB
  Free  PE / Size       102399 / <400.00 GiB
  VG UUID               hun4gL-bgcZ-KdmW-5rkw-59o5-Miby-2inD5G


#将空闲的102399个追加到  /dev/ubuntu-vg/ubuntu-lv  lv上
lvresize -l +102399 /dev/ubuntu-vg/ubuntu-lv


#lv已经有500G大小了
lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                KGk7ni-kevv-hLrb-e9QS-DSFl-x0S8-d15jWM
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-09-18 14:35:53 +0800
  LV Status              available
  # open                 1
  LV Size                498.99 GiB
  Current LE             127742
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0


#刷新文件系统的分区大小
resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 63
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 130807808 (4k) blocks long.



#已经/目录已经有500G了
df -h
...
/dev/mapper/ubuntu--vg-ubuntu--lv  491G   28G  444G   6% /
...

方案一:直接返回值

new Promise(function(resolve, reject) {

      setTimeout(() => resolve(1), 1000); // (*)

    }).then(function(result) { // (**)

      alert(result); // 1
      return result * 2;

    }).then(function(result) { // (***)

      alert(result); // 2
      return result * 2;

    }).then(function(result) {

      alert(result); // 4
      return result * 2;

    });

方案二:返回promise作为结果

new Promise(function(resolve, reject) {

  setTimeout(() => resolve(1), 1000);

}).then(function(result) {

  alert(result); // 1

  return new Promise((resolve, reject) => { // (*)
    setTimeout(() => resolve(result * 2), 1000);
  });

}).then(function(result) { // (**)

  alert(result); // 2

  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(result * 2), 1000);
  });

}).then(function(result) {

  alert(result); // 4
});

django 3.2版本文档:

HttpRequest内置API:
https://docs.djangoproject.com/zh-hans/3.2/ref/request-response/
数据库操作API:
https://docs.djangoproject.com/zh-hans/3.2/ref/models/querysets/
带表情的数据写入数据失败怎么解决:
https://blog.qqvbc.com/default/619.html
requests请求远程API代理问题、SSL问题、官方API文档:
https://blog.qqvbc.com/default/613.html
https://requests.readthedocs.io/en/latest/api/
rest风格的框架插件API文档:
https://www.django-rest-framework.org/api-guide/viewsets/

数据分页:

        page = request.POST.get('page')
        limit = request.POST.get('limit')

        querySet = articleModel.objects.all().order_by('-id')
        pager = Paginator(querySet, limit if limit else 10)
        items = []
        for item in pager.page(page if page else 1):
            items.append({id: item.id, title: item.title})

        JsonResponse({'data': data, 'count': pager.count if pager else len(data)})

报错内容类似:

django.db.utils.OperationalError: (1366, "Incorrect string value: '\xD9\x88\xDB\x95\xD8\xB3...' for column 'name' at row 1")

奇怪的是,我知道需要把数据库改为utf8mb4格式存储内容,而且也确定修改好了数据库编码问题。但应用里面死活还是报这个错误,有一点应用里面也需要配置字符集编码才能解决。

1.修改MySQL数据库、表和列,使用utf8mb4字符集(看这里怎么修改:https://blog.qqvbc.com/default/616.html
2.编辑 settings.py ,数据库配置那段里面,添加上数据库编码配置

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

注意:为避免失误,请先备份你的数据库!!!

一般情况下,我们会设置MySQL默认的字符编码为utf8,但是近些年来,emoji表情的火爆使用,给数据库带来了意外的错误,就是emoji的字符集已经超出了utf8的编码范畴

现在的应用一般不要在MySQL上使用utf8字符编码,推荐使用utf8mb4

utf8mb4是MySQL5.5.3版本之后支持的字符集,so,如果你需要使用这个字符集,前提条件是你的MySQL版本必须 >= 5.5.3

#查看当前系统默认的字符集设置
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

#修改database默认的字符集
ALTER DATABASE {database_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

#可以看到,虽然修改了database的字符集为utf8mb4,但是实际只是修改了database新创建的表,默认使用utf8mb4,原来已经存在的表,字符集并没有跟着改变,需要手动为每张表设置字符集



#只修改表默认的字符集
ALTER TABLE {table_name} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改表默认的字符集和所有字符列的字符集
ALTER TABLE {table_name} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改column默认的字符集
ALTER TABLE {table_name} CHANGE {column_name} {column_name} VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

检查字段的最大长度和索引列

字段长度

由于从utf8升级到了utf8mb4,一个字符所占用的空间也由3个字节增长到4个字节,但是我们当初创建表时,设置的字段类型以及最大的长度没有改变。例如,你在utf8下设置某一字段的类型为TINYTEXT, 这中字段类型最大可以容纳255字节,三个字节一个字符的情况下可以容纳85个字符,四个字节一个字符的情况下只能容纳63个字符,如果原表中的这个字段的值有一个或多个超过了63个字符,那么转换成utf8mb4字符编码时将转换失败,你必须先将TINYTEXT更改为TEXT等更高容量的类型之后才能继续转换字符编码

索引

在InnoDB引擎中,最大的索引长度为767字节,三个字节一个字符的情况下,索引列的字符长度最大可以达到255,四个字节一个字符的情况下,索引的字符长度最大只能到191。如果你已经存在的表中的索引列的类型为VARCHAR(255)那么转换utf8mb4时同样会转换失败。你需要先将VARCHAR(255)更改为VARCHAR(191)才能继续转换字符编码

修改配置文件

vim /etc/my.cnf
# 对本地的mysql客户端的配置
[client]
default-character-set=utf8mb4

# 对其他远程连接的mysql客户端的配置
[mysql]
default-character-set=utf8mb4

# 本地mysql服务的配置
[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4

> service mysqld restart

检查修改

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

修复&优化所有数据表

mysqlcheck -u root -p --auto-repair --optimize --all-databases