debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從
預設已經apt install 好了mysql-server, 目的隻是測試下mysqld_multi 來配置單機多執行個體和主從. 這裡沒有用docker來直接啟不同的mysql執行個體.
預設的mysql已經啟用并且占用3306端口, 新加的3307和3308 分别為 從(3307)和主(3308).
mysql 3306 獨立運作, 使用配置/etc/mysql/my.cnf (軟鍊到 /etc/mysql/mysql.cnf)
mysql的主從基于binlong, 是以主需要開啟binlong, 主上有一個log dump的縣城, 用來和從的I/O線程傳遞binlog, 從将主的binlog事件(sql語句)同步到從機并記錄在relaylog 裡, 從根據relaylog的sql語句按序執行.
單機多執行個體配置
新加兩個執行個體, 分别是3307和3308端口.
首先是增加配置, 在/etc/mysql/ 下建立一個檔案 mysql_multi.cnf
[client]
default-character-set=utf8
default-character-set=utf8mb4
[mysql]
prompt=\\[email protected]\\h:\\p \\d \\r:\\m:\\s>
default-character-set = utf8
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
password = 123456
log = /var/log/mysql/mysqld_multi.log
[mysqld3308]
default-storage-engine=INNODB
init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_ci
user = mysql
port = 3308
basedir = /usr
datadir = /var/lib/mysql3308
tmpdir = /tmp
socket = /var/run/mysqld/mysqld3308.sock
pid-file = /var/run/mysqld/mysqld3308.pid
log-error = /var/log/mysql/mysql3308.log
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 0.0.0.0
net_buffer_length = 640K
net_read_timeout = 60
net_write_timeout = 60
connect_timeout = 10
tmp_table_size = 256M
skip-name-resolve
max_allowed_packet = 16M
table_open_cache = 512
read_buffer_size = 2M
read_rnd_buffer_size = 8M
thread_stack = 192K
thread_cache_size = 8
slow-query-log = 1
long_query_time = 10
log_queries_not_using_indexes = 1
expire_logs_days = 30
[mysqld3307]
port = 3307
basedir = /usr
datadir = /var/lib/mysql3307
tmpdir = /tmp
socket = /var/run/mysqld/mysqld3307.sock
pid-file = /var/run/mysqld/mysqld3307.pid
log-error = /var/log/mysql/mysql3307.log
user = mysql
接下來建立兩個執行個體的目錄
#mkdir /var/lib/mysql3307 /var/lib/mysql3308
#chown -R mysql:mysql /var/lib/mysql3307 /var/lib/mysql3308
初始化執行個體
#mysqld --initialize --basedir=/usr --datadir=/var/lib/mysql3307 --user=mysql
這裡會有個密碼1, 簡單記下
#mysqld --initialize --basedir=/usr --datadir=/var/lib/mysql3308 --user=mysql
這裡會有個密碼2, 簡單記下
不想記住密碼的話, 用參數–initialize-insecure
為了簡單我這裡都用的root/123456 作為mysql帳号密碼
mysqld_multi start/stop/report/reload [server-id]
指令一看就明白. 開始/停止/報告/重新開機含加載
啟動
mysqld_multi --defaults-extra-file=/etc/mysql/mysql_multi.cnf start
接下來進去修改下密碼
/usr/bin/mysqladmin -u root -p password "123456" -S /var/run/mysqld/mysqld3307.sock
輸入剛才記的密碼1
然後嘗試登入
mysql -uroot -p -P3307 -S /var/run/mysqld/mysqld3307.sock
注意, 這裡指定了SOCK參數, 如果想不指定sock參數, 可以用-hserver_ip 來連結(不能用localhost或者域名, 還沒授權)
mysql -uroot -p -h127.0.0.1 -P3307
檢視下權限, 沒有就授權, 簡單就授權了所有
>show grants for 'root';
>grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
>flush privileges;
3308 重複上面操作
這時單機就啟了3個執行個體了. 包含一個原本的3306, 通過mysqld_multi 啟的3307和3308, 各執行個體間沒有關系.
現在配置3307為從, 3308為主.
進入3308 建立ssss的DB和aaatest的表
create database ssss;
use ssss;
CREATE TABLE `aaatest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(10) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `aaatest` (`content`) VALUES ('aaa'),('bbb'),('ccc'),('ddd');
然後把這個庫和表導入到3307
在[mysqld3308] 裡面增加
server-id=3308
log-bin=/var/lib/mysql3308/mysql-bin-3308
binlog_do_db = ssss #要同步的庫, 這裡我建立了一個ssss的DB, 裡面有一個表aaatest
binlog-ignore-db = mysql #不同步mysql庫和test庫
binlog-ignore-db = test
log-slave-updates
sync_binlog=1
auto_increment_offset = 1
auto_increment_increment = 1
expire_logs_days = 7
log_bin_trust_function_creators = 1
在[mysqld3307] 裡面增加
server-id=3307
#replicate-do-db=ssss
replicate-wild-do-table = ssss.%
replicate-wild-ignore-table = test.%
接下來重新開機下3307和3308
mysqld_multi --defaults-extra-file=/etc/mysql/mysql_multi.cnf reload
然後登入3308, 執行
show master status;
記下File
接下來去3307來啟動slave和配置master (mysql5.5 後執行在mysql 裡面執行指令來配置啟用master slave同步)
mysql 3307>CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_USER='root',
MASTER_PORT=3308,
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin-3308.000004',
MASTER_LOG_POS=0;
mysql 3307>slave start;
mysql 3307>show slave status\G;
可以看見在主庫3308上已經多了一個Binlog Dump的線程
分别查詢下資料.
在3308主上插入一條, 從庫執行查詢
這樣單機多執行個體主從就實作了. 裡面有權限的一些配置, 這個按需配置就行了. 還有一些主從參數的優化查下官方手冊就可以了.