标签: mariadb

Maxscale 失去连接

我目前正在使用读/写拆分模式下的 3 个节点的 Galera 集群测试 Maxscale。默认情况下,Maxscale 将一个节点定义为主节点,另一个节点定义为从节点(我的配置是 100% 的从节点)。

我的目的是检查 Maxscale 如何处理节点关闭。

问题在于,使用基准测试(Sysbench、Mysqlslap)和自定义脚本 (PHP),当我关闭集群的一个节点时,与后端 (MariaDB) 的连接会丢失。

错误日志:

MariaDB Corporation MaxScale    /var/log/maxscale/error1.log Thu Oct 29 13:00:11 2015
-----------------------------------------------------------------------
---     Logging is enabled.
2015-10-29 13:00:11   Error: Failed to obtain address for host ::1, Address family for hostname not supported
2015-10-29 13:00:11   Warning: Failed to add user root@::1 for service [RW Split Router]. This user will be unavailable via MaxScale.
2015-10-29 13:00:11   Warning: Duplicate MySQL user found for service [RW Split Router]: cmon@127.0.0.1 …
Run Code Online (Sandbox Code Playgroud)

php proxy mariadb galera sysbench

7
推荐指数
1
解决办法
4373
查看次数

#1064 - 你的 SQL 语法有错误;检查与您的 MariaDB 服务器相对应的手册

我试图在我的 sql 服务器上运行以下查询:

CREATE TABLE `e_store`.`products`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(250) NOT NULL ,
    `brand_id` INT UNSIGNED NOT NULL ,
    `category_id` INT UNSIGNED NOT NULL ,
    `attributes` JSON NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`(`category_id` ASC) ,
    INDEX `BRAND_ID`(`brand_id` ASC) ,
    CONSTRAINT `brand_id` FOREIGN KEY(`brand_id`) REFERENCES `e_store`.`brands`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE ,
    CONSTRAINT `category_id` FOREIGN KEY(`category_id`) REFERENCES `e_store`.`categories`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

我的 e_store 数据库中已经有品牌和类别表。

但我收到以下错误:

#1064 - You have …
Run Code Online (Sandbox Code Playgroud)

sql mariadb

7
推荐指数
2
解决办法
2万
查看次数

ERROR 1047 (08S01): 当我创建数据库或使用数据库时,WSREP 尚未准备好节点供应用程序使用

问这个问题之前,我搜索了stackoverflow,发现了一个类似的帖子:
mariadb galera - Error when a node shutdown ERROR 1047 WSREP尚未准备好节点供应用程序使用

但是,帖子是双节点集群,我的是三节点集群,并且在每个节点中,mariadb 都运行如下:

控制器 1:

[root@controller1 mysql]# systemctl status mariadb
? mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           ??migrated-from-my.cnf-settings.conf
   Active: active (running) since Tue 2017-07-04 19:34:22 CST; 19h ago
 Main PID: 3785 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           ??3785 /usr/sbin/mysqld --wsrep_start_position=de05f291-60a9-11e7-a641-13dca5e08098:0

Jul 05 14:52:54 controller1 mysqld[3785]: 2017-07-05 14:52:54 139817407719168 [Note] WSREP: applier thread exiting (code:6)
Jul 05 14:52:54 controller1 …
Run Code Online (Sandbox Code Playgroud)

cluster-computing mariadb galera

7
推荐指数
1
解决办法
6920
查看次数

使用 PHP PDO 连接 MySQL/MariaDB,使用 --ssl 无需证书

我可以通过提供不带任何证书的 --ssl 选项从 Sequel Pro(参见这篇文章)和控制台连接到 MySQL/MariaDB :

$ mysql -u myusername -p -h 10.123.45.67 --ssl
Enter password:
Welcome to the MariaDB monitor.
Run Code Online (Sandbox Code Playgroud)

不使用 --ssl 连接是不可能的,因为用户需要 SSL:

$ mysql -u myusername -p -h 10.123.45.67
Enter password:
ERROR 1045 (28000): Access denied for user 'myusername'@'10.123.45.67' (using password: YES)
Run Code Online (Sandbox Code Playgroud)

如何使用 PDO 在 PHP 中实现相同的功能?

我已经研究了过去几个小时,但没有找到解决方案。我尝试修改提供给 PDO 构造函数的 dsn 和选项参数,但没有成功。我要么最终得到错误代码 1045(访问被拒绝)或 2002(无法通过套接字连接):

$pdo = new PDO('mysql:dbname=...;host=10.123.45.67;port=3306', 'myusername', '...');
Run Code Online (Sandbox Code Playgroud)

PHP 致命错误:未捕获的 PDOException:SQLSTATE[HY000] [1045] 用户“myusername”@“10.123.45.67”的访问被拒绝(使用密码:YES)

添加PDO::MYSQL_ATTR_SSL_KEY(和其他)作为 PDO 构造函数的选项,导致 2002(这些选项没有意义,因为我没有密钥等)。虽然我不知道如何以与从控制台或在 Sequel …

php mysql ssl pdo mariadb

7
推荐指数
1
解决办法
3119
查看次数

mariadb IF 语句错误信息?

我测试 sql 查询。

    IF 3 = 3 THEN 
       SELECT 'TRUE'
    ELSE
       SELECT 'FALSE'
    END IF;
Run Code Online (Sandbox Code Playgroud)

我在 SQLyog 上执行了该查询。

我收到以下错误消息。

 You have an error in your SQL syntax; check the manual that corresponds to 
 your MariaDB server version for the right syntax to use near 'ELSE SELECT 
 'FALSE' END IF' at line 3
Run Code Online (Sandbox Code Playgroud)

该查询非常简单。我不知道为什么会出现错误消息。

mariadb mariasql

7
推荐指数
1
解决办法
7203
查看次数

通过 mysql_native_password 更改用户 root@localhost 标识;-- 因语法错误而失败

尝试根据以下页面启用常规的基于密码的身份验证:https : //mariadb.com/kb/en/library/authentication-plugin-unix-socket/

该页面建议使用以下代码:

ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;
SET PASSWORD = PASSWORD('foo');
Run Code Online (Sandbox Code Playgroud)

但在我的机器上它失败并出现语法错误:

MariaDB [(none)]> ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER root@localhost IDENTIFIED VIA mysql_native_password' at line 1
MariaDB [(none)]> SET PASSWORD = PASSWORD('foo');
Query OK, 0 rows affected, 1 warning (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

mysql mariadb

7
推荐指数
2
解决办法
8591
查看次数

MariaDB 的默认端口?

MariaDb 的默认端口是什么?

我是编程新手。我正在创建我的第一个连接到 MariaDB 的 Java 应用程序。我需要指定数据库端口。

mariadb

7
推荐指数
1
解决办法
1万
查看次数

当项目同时使用 MySQL 和 PostgreSQL 时,从 JsonStringType 切换到 JsonBinaryType


当需要从 PostgreSQL 切换到 MariaDB/MySql 时,我遇到了列 json 的问题。
我使用 Spring Boot + JPA + Hibernate + hibernate-types-52。
我要映射的表是这样的:

CREATE TABLE atable(
 ...
 acolumn JSON,
 ... 
);
Run Code Online (Sandbox Code Playgroud)

好的,它适用于 PostgreSQL 和 MariaDB/MySql。
问题是当我想部署一个可以轻松从一个切换到另一个的应用程序时,因为 PostgreSQL 和 MySQL/MariaDB 的正确 hibernate-types-52 实现是不同的

这适用于 MySQL/MariaDB

@Entity
@Table(name = "atable")
@TypeDef(name = "json", typeClass = JsonStringType.class)
  public class Atable {
  ...
  @Type(type = "json")
  @Column(name = "acolumn", columnDefinition = "json")
  private JsonNode acolumn;
  ...
}
Run Code Online (Sandbox Code Playgroud)

这适用于 PosgreSQL

@Entity
@Table(name = "atable")
@TypeDef(name = "json", typeClass = JsonBinaryType.class)
public …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql hibernate mariadb hibernate-types

7
推荐指数
1
解决办法
3170
查看次数

为什么mysql解释分析不起作用?

除了拥有 mariadb 10.1.36-MariaDB 之外,我还收到以下错误。

EXPLAIN ANALYZE select 1
MySQL said: Documentation

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ANALYZE select 1' at line 1
Run Code Online (Sandbox Code Playgroud)

我还需要在这里做什么。我的 PHP 版本是 7.2.11。

php mysql query-optimization mariadb

7
推荐指数
1
解决办法
2742
查看次数

docker-compose mariadb docker-entrypoint-initdb.d sql 未执行

我试图让我的 docker db 容器在创建时使用数据集自动填充数据库。根据mariadb 文档,卷中有一个docker-entrypoint-initdb.d文件夹可用于此目的。

我将我的docker-compose.yml文件设置为镜像我在 StackOverflow 上找到的示例,但仍然无法执行我的 SQL 脚本。以下是我的docker-compose.yml文件的相关部分:

version: '3.6'
services:

  db:
    image: mariadb:10.5.4-focal
    container_name: db
    volumes:
      - ./cms/conf/mysql/data/:/var/lib/mysql/:rw
      - ./cms/sql/:/docker-entrypoint-initdb.d/:ro
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_USER=root
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=wordpress
    restart: always

  adminer:
    image: adminer:4.7.7-standalone
    container_name: adminer
    links:
      - db
    ports:
      - 8080:8080
    restart: always
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml文件旁边,我有一个cms/sql/init.sql包含以下内容的文件:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `test`;
Run Code Online (Sandbox Code Playgroud)

在每次测试迭代之前,我会清理所有旧的/缓存的 Docker 内容:

  1. $ docker-compose …

mariadb docker adminer docker-compose

7
推荐指数
1
解决办法
6037
查看次数