Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

Multiple MySQL instances on one server

 Notes:

  • The process described here is for Linux OS.
  • We can only have one version of MySQL setup on the machine using default installation procedure with apt-get.
    • If we try to install one version over other, it will replace the first version and will retain the second version.

1. Create Data directory

1.1 Create a directory

mkdir -p /opt/second_server_data/


1.2 Initializing the directory

Initializing the directory

chmod --reference /var/lib/mysql /opt/second_server_data/
chown --reference /var/lib/mysql /opt/second_server_data/

Add rules to the policy file to stop the OS from restricting MySQL to access our newly created directoriesy, etc.

Edit “/etc/apparmor.d/usr.sbin.mysqld”, add these permissions (as the default data dir has).

sudo nano /etc/apparmor.d/usr.sbin.mysqld
 
Under “# Allow data dir access”:
/opt/second_server_data/ r,
/opt/second_server_data/** rwk,
 
Under “# Allow pid, socket, socket lock file access”:
/var/run/mysqld/second_server.pid rw,
/var/run/mysqld/second_server.sock rw,
/var/run/mysqld/second_server.sock.lock rw,
/run/mysqld/second_server.pid rw,
/run/mysqld/second_server.sock rw,
/run/mysqld/second_server.sock.lock rw,

Restart apparmor service

(AppArmor is a linux kernel security module that allows you to restrict program capabilities on a per-program basis)

sudo service apparmor restart


1.3 Initialize the created data dir as a MySQL data directory

mysqld --initialize --user=mysql --datadir=/opt/second_server_data/

Check the contents of the dir: “sudo ls -l /opt/second_server_data/”.

These files should be there (drwxr-x--- 2 mysql mysql …..) : mysql, performance_schema, sys

A default root password was generated and stored in “/var/log/mysql/error.log”

2020-12-17T08:45:06.170673Z 1 [Note] A temporary password is generated for root@localhost: 1hfBQ5G66d_V


2. Create a socket (and a TCP port) for a client

Given correct permissions MySQL is able to create these on its own.


3. MySQL configurations

* Steps 3-5 can be done also using mysqld or mysqld_safe.


start mysqld / mysqld_safe

sudo mysqld --no-defaults --datadir=/opt/second_server_data/ --port=3307 --socket=/var/run/mysqld/second_server.sock
  1. no-defaults: Makes sure no options are loaded from option files.
  2. data-dir: Path to the data directory that we created.
  3. port: TCP port.
  4. mysqlx: X plugin is an interface to allow MySQL function as a document store. Since we don’t need it, we will disable it.
  5. socket: Specify location of socket file

sudo mysqld_safe --no-defaults --datadir=/opt/second_server_data/ --port=3307 --socket=/var/run/mysqld/second_server.sock


4. Testing

mysql -h 127.0.0.1 -P 3307 -u root –p
--Or
mysql --socket=/var/run/mysqld/second_server.sock -u root –p
 
--Stop mysqld_safe using:
sudo mysqladmin -h 127.0.0.1 -P 3307 -u root -p shutdown

In order to perform SQL operations, the auto generated password should be changed:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'second_server';


5. Create cnf file for the second instance

5.1 Copy the cnf file and add to it:

[mysqld]
server-id = 2
port = 3307
socket = /var/run/mysqld/second_server.sock
datadir = /opt/second_server_data/
#mysqlx = 0

or

[mysqld_safe]
server-id = 2
port = 3307
socket = /var/run/mysqld/second_server.sock
datadir = /opt/second_server_data/
#mysqlx = 0


5.2 start mysqld/mysqld_safe with the new cnf

sudo mysqld --defaults-file=/etc/mysql/second_server.cnf

or

sudo mysqld_safe --defaults-file=/etc/mysql/second_server.cnf

5.3 Testing as before


6. Create a service for the new instance

Create a service using system

6.1 Create “.service” file

Save in “/lib/systemd/system/” or “/etc/systemd/system”

touch mysql_3307.service
vi mysql_3307.service
 
[Unit]
Description=MySQL 3307 service
After=network.target
 
[Service]
Type=simple
Restart=always
User=mysql
Group=mysql
ExecStart=/etc/mysql/sudo mysqld --defaults-file=/etc/mysql/second_server.cnf
TimeoutSec=600
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
LimitNOFILE=5000
 
[Install]
WantedBy=multi-user.target


6.2 Start the service

Sudo systemctl start mysql_3307


6.3 Checking

systemctl status mysql_3307
 
journalctl -xe


6.* Stop the service (if required)

systemctl stop mysql_3307

No comments:

Post a Comment