mysql 單臺機器多例項
阿新 • • 發佈:2020-10-21
MySQL多例項
1.例項
1.單例項:
1個程序 + 多個執行緒 + 單個預分配的記憶體空間
2.多例項:
多個程序 + 多個執行緒 + 多個預分配的記憶體空間
3.MySQL多例項:
1)多個埠
2)多個socket檔案
3)多個server_id
4)多個日誌檔案
5)多個配置檔案
6)多個數據目錄
2.建立多例項存放目錄
[root@db02 /service]# mkdir /service/{3307,3308,3309}
3.配置多個配置檔案
[root@db02 /service]# vim /service/3307/my.cnf [mysqld] basedir=/service/mysql datadir=/service/3307/data port=3307 socket=/service/3307/data/mysql.sock server_id=7 log-error=/service/3307/data/mysql.err [root@db02 /service]# vim /service/3308/my.cnf [mysqld] basedir=/service/mysql datadir=/service/3308/data port=3308 socket=/service/3308/data/mysql.sock server_id=8 log-error=/service/3308/data/mysql.err [root@db02 /service]# vim /service/3309/my.cnf [mysqld] basedir=/service/mysql datadir=/service/3309/data port=3309 socket=/service/3309/data/mysql.sock server_id=9 log-error=/service/3309/data/mysql.err
4.初始化多例項資料目錄
[root@db02 /service]# cd mysql/scripts/ [root@db02 /service/mysql/scripts]# ./mysql_install_db --defaults-file=/service/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3307/data [root@db02 /service/mysql/scripts]# ./mysql_install_db --defaults-file=/service/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3308/data [root@db02 /service/mysql/scripts]# ./mysql_install_db --defaults-file=/service/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data [root@db02 /service]# tree -L 3 ./ ./ ├── 3307 │ ├── data │ │ ├── ibdata1 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── mysql │ │ ├── mysql.err │ │ ├── performance_schema │ │ └── test │ └── my.cnf ├── 3308 │ ├── data │ │ ├── ibdata1 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── mysql │ │ ├── mysql.err │ │ ├── performance_schema │ │ └── test │ └── my.cnf ├── 3309 │ ├── data │ │ ├── ibdata1 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── mysql │ │ ├── mysql.err │ │ ├── performance_schema │ │ └── test │ └── my.cnf ├── mysql -> /service/mysql-5.6.42 └── mysql-5.6.42
5.授權
[root@db02 /service]# chown -R mysql.mysql /service/
6.啟動多例項
[root@db02 /service]# mysqld_safe --defaults-file=/service/3307/my.cnf &
[root@db02 /service]# mysqld_safe --defaults-file=/service/3308/my.cnf &
[root@db02 /service]# mysqld_safe --defaults-file=/service/3309/my.cnf &
7.驗證啟動
[root@db02 /service]# netstat -lntp | grep 330 tcp6 0 0 :::3306 :::* LISTEN 24992/mysqld tcp6 0 0 :::3307 :::* LISTEN 32069/mysqld tcp6 0 0 :::3308 :::* LISTEN 32234/mysqld tcp6 0 0 :::3309 :::* LISTEN 32394/mysqld
8.登入驗證多例項
[root@db02 /service]# mysql -uroot -S /service/3307/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 7 |
+---------------+-------+
[root@db02 /service]# mysql -uroot -S /service/3308/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 8 |
+---------------+-------+
[root@db02 /service]# mysql -uroot -S /service/3309/data/mysql.sock -e 'show variables like "server_id"'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 9 |
+---------------+-------+
9.多例項設定密碼
[root@db02 /service]# mysqladmin -uroot password -S /service/3307/data/mysql.sock
New password: 123
Confirm new password: 123
[root@db02 /service]# mysqladmin -uroot password -S /service/3308/data/mysql.sock
New password: 123
Confirm new password: 123
[root@db02 /service]# mysqladmin -uroot password -S /service/3309/data/mysql.sock
New password: 123
Confirm new password: 123
10.配置簡單連線資料庫多例項
#1.編寫連線資料庫檔案
[root@db02 /service]# cat /usr/bin/mysql3307
mysql -uroot -p123 -S /service/3307/data/mysql.sock
[root@db02 /service]# cat /usr/bin/mysql3308
mysql -uroot -p123 -S /service/3308/data/mysql.sock
[root@db02 /service]# cat /usr/bin/mysql3309
mysql -uroot -p123 -S /service/3309/data/mysql.sock
#2.授權執行許可權
[root@db02 /service]# chmod +x /usr/bin/mysql*
#3.直接使用命令連線
[root@db02 /service]# mysql3307
[root@db02 /service]# mysql3308
[root@db02 /service]# mysql3309
資料庫多例項主從
0)配置主庫的binlog
[root@db02 /service]# vim /service/3307/my.cnf
... ...
log_bin=/service/3307/data/mysql-bin
1.主庫授權主從的使用者
mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
2.主庫檢視binlog資訊
mysql> show master status;
+------------------+----------+
| File | Position |
+------------------+----------+
| mysql-bin.000001 | 120 |
+------------------+----------+
1 row in set (0.01 sec)
3.從庫配置同步主庫
#1.從庫需要知道主庫的資訊
1)主庫的地址
2)主庫的埠
3)主庫授權的使用者
4)主庫授權的使用者的密碼
5)主庫的binlog日誌名字
6)binlog的位置點
#2.從庫配置主從同步
mysql> change master to
-> master_host='172.16.1.52',
-> master_port=3307,
-> master_user='rep',
-> master_password='123',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
change master to
master_host='172.16.1.52',
master_port=3309,
master_user='rep',
master_password='123',
master_log_file='mysql-bin.000001',
master_log_pos=120;
4.啟動主從同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
5.檢視主從狀態
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rep
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 416
Relay_Log_File: db02-relay-bin.000002
Relay_Log_Pos: 579
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6.主從同步問題
1)IO執行緒為NO
1.檢查網路
[root@db02 ~]# ping 127.0.0.1
2.檢查埠
[root@db02 ~]# telnet 127.0.0.1 3307
3.檢視防火牆
4.主從同步的使用者和密碼錯誤
檢查change master to語句資訊是否正確
5.資料庫反向解析
2)SQL執行緒為NO
1.主庫有的資料,從庫沒有
2.從庫有的資料,主庫沒有
3.主庫與從庫資料不一致
手動停掉從庫 stop slave;
手動同步
change master to
master_host='172.16.1.52',
master_user='rep',
master_password='123',
master_port=3309,
master_log_file='mysql-bin.000001',
master_log_pos=201
啟動 start slave
檢視