Linux中Docker挂载mysql/mariadb等数据库,数据库问题汇总

目录

  • Docker挂载的mysql/mariadb等数据库,远程连接时间长
    • 解决方案1
    • 解决方案2
  • Docker挂载的mysql/mariadb等数据库,IO性能下降严重/性能损失/备份还原慢
    • 实测数据
    • 解决方法
  • Docker启动mysql/mariadb并挂载目录和解决数据库时间不正确

Docker挂载数据库问题汇总
觉得有帮助的同学可以点个赞!传递给更多人!


Docker挂载的mysql/mariadb等数据库,远程连接时间长

本地链接秒连但是远程连接慢

解决方案1

在配置文件my.cnf中加入

skip-name-resolve

Linux中Docker挂载mysql/mariadb等数据库,数据库问题汇总_第1张图片
然后重启容器

docker restart 你的容器id

解决方案2

在原来的启动的命令中加上
–skip-name-resolve
例如

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=输入你的密码 --name mariadb_ubuntu --skip-name-resolve 0a2fe61c51d1

Docker挂载的mysql/mariadb等数据库,IO性能下降严重/性能损失/备份还原慢

实测数据

测试环境为同环境同服务,同备份数据库文件.这个服务器累积的数据库文件目前已经有280G+
未处理前-3m22s

Linux中Docker挂载mysql/mariadb等数据库,数据库问题汇总_第2张图片

处理后-1m27s

Linux中Docker挂载mysql/mariadb等数据库,数据库问题汇总_第3张图片

解决方法

linux中输入

lsblk -f

获取你的数据库所在的存储位置的信息
Linux中Docker挂载mysql/mariadb等数据库,数据库问题汇总_第4张图片
然后使用

vi /etc/fstab

Linux中Docker挂载mysql/mariadb等数据库,数据库问题汇总_第5张图片
在你对应的存储位置增加

barrier=0

示例

UUID=a90a3f4d-d95f-4e25-94cb-a608e5ce943d /home/diska ext4 defaults,barrier=0 0 0
UUID=7086b60d-2524-4cda-994a-254c8ade9bdb /home/diskb ext4 defaults,barrier=0 0 0

然后重启linux服务器,即可完成修复.

barrier的解释

此处参考:https://blog.csdn.net/lidan3959/article/details/12617639
Linux日志和barrier功能
要理解barrier,你首先需要理解文件系统日志功能。常用的文件系统使用日志功能来保证文件系统的完整性。该功能背后的思路很简单:在写入新的 数据块到磁盘之前,会先将元数据写入日志。预先将元数据写入日志可以保证在写入真实数据前后一旦发生错误,日志功能能很容易地回滚到更改之前的状态。这个方法确保了不会发生文件系统崩溃的情况。 单独使用日志功能不能保证没有任何差错。现在的磁盘大都有大容量的缓存,数据不会立即写入到磁盘中,而是先写入到磁盘缓存中。到这一步,磁盘控制器就能更加高效地将其复制到磁盘中。这对性能来说是有好处的,但是对日志功能来说则相反。为了保证日志百分之百可靠,它必须绝对保证元数据在真实数据写入之前被预先写入。这就是我们要介绍文件系统barrier的原因。我们很容易理解使用barrier的根本原因:barrier本身禁止在barrier之后写入数据,真实的数据块将在barrier被写入之前完全写入磁盘。使用barrier可以确保文件系统的完整性,因为barrier功能在EXT4文件系统中是默认启用的(除非你的操作系统更改了这个默认设>置)。


Docker启动mysql/mariadb并挂载目录和解决数据库时间不正确

# 这里我使用了配置文件my.cnf;3307:3306 3307是外部端口。并且利用目录挂载实现将数据库的存储位置挂载到其他磁盘。
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=输入你的密码 -v /home/disk_sql/mariadb_data/data:/var/lib/mysql -v /home/disk_sql/mariadb_data/conf/my.cnf:/etc/mysql/my.cnf --name mariadb_ubuntu 0a2fe61c51d1
# 解决数据库时间不正确(因为需要更改时区) docker cp 时区文件 容器id:容器内时区路径
docker cp /usr/share/zoneinfo/Asia/Shanghai f552c2171ecf:/etc/localtime

你可能感兴趣的:(Linux,数据库,linux,docker)