标签: MariaDB

  • Windows10 Docker Mariadb InnoDB: Write to file ./ibdata1 failed

    Windows10 Docker Mariadb InnoDB: Write to file ./ibdata1 failed

    错误描述

    通过容器日志查到错误信息如下:

    2020-01-05 13:06:14 0 [Warning] InnoDB: Retry attempts for writing partial data failed.

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Write to file ./ibdata1 failed at offset 0, 1048576 bytes should have been written, only 0 were written. Operating system error number 22. Check that your OS and file system support files of this size. Check also that the disk is not full or a disk quota exceeded.

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Error number 22 means ‘Invalid argument’

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Could not set the file size of ‘./ibdata1’. Probably out of disk space

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

    2020-01-05 13:06:15 0 [ERROR] Plugin ‘InnoDB’ init function returned error.

    2020-01-05 13:06:15 0 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.

    2020-01-05 13:06:15 0 [ERROR] Unknown/unsupported storage engine: InnoDB

    2020-01-05 13:06:15 0 [ERROR] Aborting

    windows10 + Docker 安装 mariadb 时,一安装老是出现以上错误。创建命令如下:

    docker run -d -p 3307 --name jmysql -v D:\MysqlData\:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jjjjjj mariadb

    解决办法

    使用以下命令进行创建

    docker run -d -p 3307:3306 --name jmysql -v D:\MysqlData\:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jjjjjj mariadb --innodb-flush-method=fsync

    创建时需要添加:

    –innodb-flush-method=fsync

    注:重新创建时需要将 d:\MysqlData 目录清空并重新建立容器。

  • Kubernetes WEB UI Dashboard 部署 MySQL/Mariadb容器

    Kubernetes WEB UI Dashboard 部署 MySQL/Mariadb容器

    问题描述

    我们在使用Kubernetes的Dashboard部署mysql/mariadb时出现了错误(Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项):Back-off restarting failed container 错误 。

    这个错误主要是由于MySQL部署时需要设置 MYSQL_ROOT_PASSWORD 参数,但是我们这里不是时没有设置。

    Docker安装Mariadb数据库 设置root密码 图文教程

    解决方案

    在”显示高级选项”里可以找到”环境变量”设置,这里做好配置然后部署即可。

  • Docker容器中使用问题:Failed to get D-Bus connection: Operation not permitted 解决办法 图文教程

    Docker容器中使用问题:Failed to get D-Bus connection: Operation not permitted 解决办法 图文教程

    问题描述

    在CentOS7 中,docker 容器中 yum 安装完mysql后,启动mysqld报错

    systemctl start mysqld

    Failed to get D-Bus connection: Operation not permitted

    解决办法

    生成容器:

    docker run -itd -name mysql   mysql-yum-install /usr/sbin/init

    进入容器:

    docker exec -it mysql /bin/bash

    这样可以使用systemctl启动服务了。

    创建容器时正确代码

    docker run -itd --name mysql  mysql-yum-install  /usr/sbin/init

    进入容器

    docker exec -it mysql /bin/bash

    重启服务

    systemctl start mariadb
  • MySQL 出现 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误 解决办法 图文教程

    MySQL 出现 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by错误 解决办法 图文教程

    老季在接触到的一个项目中,导入MYSQL文件之后出现了错误,具体错误如下:

    Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘poweridc.t.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    查询MySQL版本可以在命令行模式刚连接上数据库时就能看到,或者在进入mysql后使用命令:status查看版本号,

    既然是版本的问题,那就查询一下配置看看具体的情况,命令行连接上数据库,再输入命令:

    select @@sql_mode;

    sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,

    对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by 的数据库,在使用group by时就会报错,

    既然知道了问题,那么修改这个配置就可以了,找到MySQL的配置文件,在linux系统上/etc/my.cnf文件,查询sql_mode字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:

    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    需要注意的一点是一定要添加在[mysqld]配置内,这样添加完后重启mysql才会生效,退出数据库:exit,重启命令:

    service mysqld restart;

    刷新页面报错信息消失成功解决,再次连接上数据库查看sql_mode配置

    select @@sql_mode;

    到此已经成功解决了这个问题。

  • MySQL调整innodb_page_size之后出现[ERROR] InnoDB: Data file /data/mysql/poweridc/data/ibdata1 is of a different size xxx pages

    MySQL调整innodb_page_size之后出现[ERROR] InnoDB: Data file /data/mysql/poweridc/data/ibdata1 is of a different size xxx pages

    问题描述

    我们在使用 mysql < 迁移导入命令时出现了 Row size too large (> 8126) 的问题,具体错误如下:

    ERROR 1118 (42000) at line 19021: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

    然后我们试图解决问题,修改 innodb_page_size 值。但是之前数据库已创建并启动,我们修改了之后导致值不相同了,所以才会出现如下错误:

    InnoDB: The innodb_system data file ‘./ibdata1’ is of a different

    解决办法

    进入到数据库存储位置的对应的数据库的mysql文件夹,将 ib_logfile0 ib_logfile1 ibdata1 等类似的文件删除,重启数据库即可。

    cd /data/mysql/
    rm ib_logfile0 -rf
    rm ib_logfile1 -rf
    rm ibdata1 -rf
    /etc/init.d/mysql restart

  • MySQL ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED

    MySQL ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED

    问题描述

    刚刚在导出mysql数据库的时候出现了如下错误:

    # mysql -uroot -p poweridc –default-character-set=utf8 < 1.sql
    Enter password:
    ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

    查了百度,主要原因是之前的数据库里面配置了主从,再导出的时候一起导出来了。所以导入时会出现这个问题。

    解决办法

    在导入的地方事先重设一下主数据库服务器即可。SQL如下:

    reset master 

    > reset master;
    Query OK, 0 rows affected (0.01 sec)

  • Docker容器下如何配置MySQL主从复制服务器 图文教程

    Docker容器下如何配置MySQL主从复制服务器 图文教程

    今天说一下MySQL的主从复制如何做到?我们这里直接使用Docker来配置。

    准备工作说明

    我们这里要做得是将jmysql2数据库容器自动同步jmysql数据库容器里的数据。

    开始前务必将jmysql、jmysql2数据库及所有表内容同步。

    建立Docker容器

    docker run -d --name jmysql -v D:\mysqlData:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=jjjjjj mariadb
    docker run -d --name jmysql2 -v D:\mysqlData2:/var/lib/mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=jjjjjj --link jmysql mariadb

    这里建立的Mariadbroot密码均为:jjjjjj

    jmysql2必须要添加 --link jmysql 参数 ,否则无法连接到jmysql服务器。

    在命令行或者CMD中分别执行一下命令

    docker exec -it jmysql /bin/bash
    docker exec -it jmysql2 /bin/bash

    初始化Docker环境

    apt-get update ; apt-get install vim -y

    原理分析

    原理:mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是

         B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作

         全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。

    扩展:MYSQL还有一种日志叫做:慢日志

         可以设置一个时间,那么所有执行时间超过这个时间的SQL都会被记录下来。这样就可以通过慢日志快速的找到网站中SQL的瓶颈来进行优化。

             大家有时间可以研究一下,这里不多做介绍。

    实现步骤

    jmysql主数据库命令行

    修改MySQL/Mariadb配置文件, 修改mysql的配置文件,使其支持二进制日志功能。

    打开主服务器的mysql配置文件:my.conf

     vi /etc/mysql/my.cnf

    加入如下代码:

    server-id               = 111
    log_bin = /var/log/mysql/mariadb-bin
    #binlog日志只记录指定库的更新
    #binlog-do-db=db_name
    #binlog日志不记录指定库的更新
    #binlog-ignore-db=db_name

    参数解释:

    log-bin=mysql-bin //将mysql二进制日志取名为mysql-bin

    binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed

    server-id=111 //为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id

    配置完成,:wq 保存,重启mysql

    重启mysql命令:#

    service mysqld restart

    同样的,进入从服务器,配置从服务器的my.cnf,重复步骤1即可,

    唯一的区别是,server-id要改成从服务器的ip尾位,即server-id=1;其他两项是一样的,保存,并重启mySQL;

    在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。

    进入主服务器的mysql界面,命令:

     mysql -u root -p 111111     //我这里mysql账号是root,密码是111111

    在mysql操作界面下,输入下面一行命令:

    GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '111111'; 

    查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变).

    show master status;

    设置jmysql2从数据库服务器

    进入从服务器mysql,命令:

    mysql -u root -p111111

    关闭slave(如果你以前配置过主从的话,一定要先关闭),命令:

    stop slave;

    开始配置:输入下面代码即可:

    change master to master_host="jmysql", master_user="slave", master_password='111111', master_log_file="mariadb-bin.000001" , master_log_pos=330;

    参数解释:

    MASTER_HOST  :  设置要连接的主服务器的ip地址
    MASTER_USER  :  设置要连接的主服务器的用户名
    MASTER_PASSWORD  :  设置要连接的主服务器的密码
    MASTER_LOG_FILE  :  设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
    MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)

    先在从服务器配置完成,启动从服务器,命令:

    start slave;

    查看是否配置成功

    show slave status;

    上面两项均为yes,说明配置成功,否则,请重复前面的步骤。

    ok,到这里MySQL的主从复制就配置完了,其实明白原理的话还是很简单的,

    这里就不给大家测试了,大家配置完可以自己测试一下,有什么问题的话,

  • create table select from 和 insert into table select from区别

    create table select from 和 insert into table select from区别

    create table select from 和 insert into table select from都是用来复制表,两者的主要区别为:

    create table select from 要求目标表不存在,因为在插入时会自动创建。

    insert into table select from 要求目标表存在,相当于复制插入。
    备份表数据:

    create table tmp_article_info as select * from article_info

    还原表数据:

    insert into tmp_article_info select * from article_info

    只复制表结构:

     create table tmp_article_info as select * from article_info where 1=0

    只复制表数据(如果两个表结构完全一样):

    insert into tmp_article_info select * from article_info

    只复制表数据(如果两个表结构不一样,或者部分复制):

    insert into tmp_article_info (column1,column2…) select column1,column2 from article_info
  • Docker 本地基本搭建Nginx+PHP-FPM+MARIADB 命令

    Docker 本地基本搭建Nginx+PHP-FPM+MARIADB 命令

    记录一下在MacOS下利用Docker搭建Nginx+php-fpm+MariaDB的常用命令:

    # 拉取镜像资源
    docker pull mariadb && docker pull bitnami/php-fpm && docker pull nginx
    # 本地Docoker建立顺序
    docker run -d --name jmysql --restart=always -e MYSQL_ROOT_PASSWORD=jjjjjj -e TZ="Asia/Shanghai" mariadb
    docker run -d --name jphp-fpm -v /wwwroot:/data/wwwroot --restart=always -e TZ="Asia/Shanghai" --link jmysql bitnami/php-fpm
    docker run -d --name jnginx -v /DockerConfig/nginx/conf.d:/etc/nginx/conf.d -v /wwwroot:/data/wwwroot -p 8081:80 --restart=always -e TZ="Asia/Shanghai" --link jphp-fpm --link jmysql nginx
    #启动顺序
    docker start jmysql
    docker start jphp-fpm
    docker start jnginx

  • Docker安装Mariadb数据库 设置root密码 图文教程

    Docker安装Mariadb数据库 设置root密码 图文教程

    前面我们介绍了Docker的内容:

    下面我们记录一下如何安装Mariadb/MySQL数据库。

    镜像库搜索安装Mariadb

    搜索Mariadb

    $ docker search mariadb
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    mariadb MariaDB is a community-developed fork of MyS… 2848 [OK]
    bitnami/mariadb Bitnami MariaDB Docker Image 98 [OK]
    linuxserver/mariadb A Mariadb container, brought to you by Linux… 75
    toughiq/mariadb-cluster Dockerized Automated MariaDB Galera Cluster … 38 [OK]
    colinmollenhour/mariadb-galera-swarm MariaDb w/ Galera Cluster, DNS-based service… 26 [OK]
    panubo/mariadb-galera MariaDB Galera Cluster 23 [OK]
    lsioarmhf/mariadb ARMHF based Linuxserver.io image of mariadb 18
    million12/mariadb MariaDB 10 – ~60Mb Alpine UTF-8 16 [OK]
    webhippie/mariadb Docker images for MariaDB 15 [OK]
    bianjp/mariadb-alpine Lightweight MariaDB docker image with Alpine… 9 [OK]
    mariadb/server MariaDB Server is a modern database for mode… 9 [OK]
    centos/mariadb-101-centos7 MariaDB 10.1 SQL database server 9
    severalnines/mariadb A homogeneous MariaDB Galera Cluster image t… 7 [OK]
    centos/mariadb-102-centos7 MariaDB 10.2 SQL database server 5
    wodby/mariadb Alpine-based MariaDB container image with or… 4 [OK]
    tutum/mariadb Base docker image to run a MariaDB database … 4
    circleci/mariadb CircleCI images for MariaDB 3 [OK]
    rightctrl/mariadb Mariadb with Galera support 2 [OK]
    jonbaldie/mariadb Fast, simple, and lightweight MariaDB Docker… 2 [OK]
    kitpages/mariadb-galera MariaDB with Galera 2 [OK]
    tiredofit/mariadb-backup MariaDB Backup image to backup MariaDB/MySQL… 1 [OK]
    demyx/mariadb FROM webhippie/mariadb:latest 0
    jelastic/mariadb An image of the MariaDB SQL database server … 0
    ansibleplaybookbundle/mariadb-apb An APB which deploys RHSCL MariaDB 0 [OK]
    alvistack/mariadb Docker Image Packaging for MariaDB 0 [OK]

    安装Mariadb

    docker pull mariadb

    运行 Mariadb 镜像

    运行Mariadb服务

    docker run --name jmariadb -p 3306:3306 -d -v D:\mysqlData:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=jiloc mariadb
    • -e MYSQL_ROOT_PASSWORD 设置数据库root密码 jiloc
    • -v 映射数据库文件位置
    • --name 设置容器别名

    ============以下是配置Mariadb的config文件映射============

    查看容器ID

    docker ps -a

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    c63468060135 mariadb “docker-entrypoint.s…” 34 seconds ago Exited (1) 33 seconds ago jmariadb
    c948b4856671 nginx “nginx -g ‘daemon of…” 21 minutes ago Up 20 minutes 0.0.0.0:8081->80/tcp jnginx
    d593465ab743 bitnami/php-fpm “php-fpm -F –pid /o…” About an hour ago Up About an hour 9000/tcp jphp-fpm

    创建配置文件夹/文件,挂载数据

    创建 D:\DockerConfig\mysql ,我们将这个文件夹作为一会Docker将要映射的文件位置。

    docker run -d -p 3306:3306 --name mariadb -v D:\DockerConfig\mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jiloc mariadb

    测试连接

    docker ps -a

    确认数据库实例在运行,然后我们这里使用Navicat Premium 进行连接

WeChat