天天看點

debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從

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
           
debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從

接下來進去修改下密碼

/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;
           
debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從

記下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的線程

debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從

分别查詢下資料.

debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從

在3308主上插入一條, 從庫執行查詢

debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從debian9 使用mysqld_multi 來配置安裝單機多執行個體以及主從

這樣單機多執行個體主從就實作了. 裡面有權限的一些配置, 這個按需配置就行了. 還有一些主從參數的優化查下官方手冊就可以了.

下一篇: js的set和get

繼續閱讀