Установка MariaDB с MySQL на Mac - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь установить MariaDB на моем Mac, используя brew. Тем не менее, я изо всех сил пытаюсь установить это из-за конфликта с MySQL. Мне было интересно, может ли кто-нибудь посоветовать, как его настроить, чтобы у меня были и MariaDB, и MySQL, так как мне понадобятся оба на моей машине, так как я работаю над несколькими проектами, которые должны использовать один или другой.

3x-iMac:~ admin$ mysql.server start
Starting MariaDB
 SUCCESS! 

3x-iMac:~ admin$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

3x-iMac:~ admin$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 8.0.11 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 10.3.8-MariaDB, for osx10.13 (x86_64) using readline 5.1

Connection id:      24
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MySQL
Server version:     8.0.11 MySQL Community Server - GPL
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /tmp/mysql.sock
Uptime:         2 hours 47 min 30 sec

Threads: 6  Questions: 1257  Slow queries: 0  Opens: 154  Flush tables: 2  Open tables: 130  Queries per second avg: 0.125
--------------

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Если вы запустите brew info, он даже предупредит вас не устанавливать их рядом, потому что они будут конфликтовать:

brew info mysql
mysql: stable 8.0.13 (bottled)
Open source relational database management system
https://dev.mysql.com/doc/refman/8.0/en/
Conflicts with:
  mariadb (because mysql, mariadb, and percona install the same binaries.)
  mariadb-connector-c (because both install plugins)
  mysql-cluster (because mysql, mariadb, and percona install the same binaries.)
  mysql-connector-c (because both install MySQL client libraries)
  percona-server (because mysql, mariadb, and percona install the same binaries.)
Not installed

На самом деле, запустите brew info mariadb, и он скажет, что это Drop-in Replacement:

brew info mariadb
mariadb: stable 10.3.12 (bottled)
Drop-in replacement for MySQL
https://mariadb.org/
Conflicts with:
  mariadb-connector-c (because both install plugins)
  mysql (because mariadb, mysql, and percona install the same binaries.)
  mysql-cluster (because mariadb, mysql, and percona install the same binaries.)
  mysql-connector-c (because both install MySQL client libraries)
  mytop (because both install `mytop` binaries)
  percona-server (because mariadb, mysql, and percona install the same binaries.)
/usr/local/Cellar/mariadb/10.3.12 (658 files, 174.4MB) *
  Poured from bottle on 2019-01-25 at 09:50:26
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mariadb.rb
==> Dependencies

Что такое вставная замена? Это относится к возможности заменить один программный компонент другим без необходимости внесения каких-либо изменений в код или конфигурацию, что не приведет к негативным последствиям.

Следовательно, и mysql, и mariadb работают с mysql.server start, оба входят в mysql с использованием mysql -h localhost -u root -p, оба ссылаются на один и тот же каталог данных в /usr/local/var/mysql, обе используют одинаковые команды, такие как mysqldump, и все это указывает что эти два работают взаимозаменяемо. Они не могут совпадать, если вы не установите их на разных виртуальных машинах, таких как vmware, или не запустите их в контейнере docket (что было предложено в другом ответе).

Но если вы не можете запустить их на отдельных виртуальных машинах или в контейнере docket, тогда я настоятельно рекомендую удалить MySQL и использовать MariaDB, поскольку MariaDB сохраняет совместимость с MySQL, но также содержит другие функции, такие как CHECK CONSTRAINTS.

Так вы бы удалили MySQL и вместо него установили MariaDB. Обратите внимание, что в моей системе я использовал mysql@5.7 через HomeBrew, поэтому я указываю, что вместо mysql:

brew remove mysql@5.7
brew cleanup

И это все. Некоторые руководства предлагают удалить отдельные каталоги, такие как эта:

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/var/mysql
sudo rm -rf /usr/local/mysql*
sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*

Но в моей системе у меня не было MySQL на панели настроек, в Launch или даже в автозапуске. Таким образом, единственное место, где я был, это действительные данные базы данных в / usr / local / var:

/usr/local/var/mysql

Но поскольку MariaDB является заменой для замены, вам не нужно удалять эти данные, и MariaDB будет использовать их после установки.

Итак, чтобы установить MariaDB:

brew install mariadb
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/services).
==> New Formulae
...
==> Updated Formulae
...
==> Deleted Formulae
...
==> Downloading https://homebrew.bintray.com/bottles/mariadb-10.3.12.mojave.bottle.tar.gz
######################################################################## 100.0%
==> Pouring mariadb-10.3.12.mojave.bottle.tar.gz
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

MySQL is configured to only allow connections from localhost by default

To connect:
    mysql -uroot

To have launchd start mariadb now and restart at login:
  brew services start mariadb
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Summary
?  /usr/local/Cellar/mariadb/10.3.12: 658 files, 174.4MB

Итак, как вы можете видеть из установки, а также запустив brew info mariadb, mariadb был установлен на

/usr/local/Cellar/mariadb/10.3.12

И исполняемый файл mysql в вашем $ PATH указывает на этот двоичный файл MariaDB:

$ which mysql
/usr/local/bin/mysql
$ ls -l /usr/local/bin/mysql
lrwxr-xr-x  1 viggy  admin  35 Jan 25 09:50 /usr/local/bin/mysql -> ../Cellar/mariadb/10.3.12/bin/mysql

Для меня, так как у меня уже был каталог данных с mysql@5.7, MariaDB смог использовать его, и у меня все еще был доступ к моим данным (хотя до удаления mysql все еще рекомендуется создать резервную копию базы данных с помощью mysqldump) :

mysql -h localhost -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.3.12-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

USE my_old_database;
Database changed
MariaDB [my_old_database]>

Как видите, теперь он использует MariaDB.

0 голосов
/ 12 июля 2018

Проблема с одновременной установкой MySQL и MariaDB заключается не столько в конфликтующем порте (оба сервера связываются с портом 3306 по умолчанию), поскольку это можно изменить в конфигурации сервера. Скорее проблема заключается в том, что MariaDB является заменой MySQL для замены и, таким образом, использует те же пути и имена для двоичных файлов (например, mysqld для сервера, mysql для клиента). Таким образом, они спроектированы таким образом, что один или другой установлен, но не оба одновременно.

Лучше было бы настроить контейнер Docker для обоих серверов баз данных и использовать его. Этот подход также имеет то преимущество, что можно также запустить несколько разных версий обоих серверов баз данных, если это необходимо. Тем не менее, вам все равно нужно сопоставить каждый контейнер с другим портом.

Простой docker-compose.yml для настройки MySQL 5 и MariaDB 10 может выглядеть следующим образом:

version: '2'
services:
  mysql5:
    image: mysql:5
    ports:
     - "3305:3306/tcp"
    environment:
      - MYSQL_ROOT_PASSWORD=secret_password
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user_password_here
      - MYSQL_DATABASE=my_db
  mariadb10:
    image: mariadb:10
    ports:
     - "3310:3306/tcp"
    environment:
      - MYSQL_ROOT_PASSWORD=secret_password
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user_password_here
      - MYSQL_DATABASE=my_db

Вы можете запустить оба контейнера, введя docker-compose up -d в терминал в каталоге файла docker-compose.yml, учитывая, что в вашей системе установлен docker-compose.

MySQL 5 будет доступен через порт 3305, MariaDB - через порт 3310. (Это оставит возможность иметь собственный MySQL или MariaDB на порту 3306.) Разумеется, следует скорректировать переменные среды для пользователей базы данных, пароли и имена баз данных. То же самое касается версий MySQL и MariaDB, если вам нужны разные версии.

После того, как контейнеры открыты (docker-compose up -d), вы можете подключиться к ним, например. с помощью:

mysql --host=::1 --user=user --password my_db --port=3310

(позаботьтесь о том, чтобы вы указали правильный аргумент порта. В этом случае порт 3310 предназначен для MariaDB 10.)

После ввода пароля для пользователя user вы можете выдавать SQL-запросы:

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.5.5-10.3.8-MariaDB-1:10.3.8+maria~jessie mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db              |
+--------------------+
2 rows in set (0,00 sec)

mysql> USE my_db;
Database changed
mysql> SHOW TABLES;
Empty set (0,00 sec)

mysql> quit
Bye

Веселитесь!

...