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=\\u@\\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主上插入一條, 從庫執行查詢
在這裏插入圖片描述
這樣單機多實例主從就實現了. 裏面有權限的一些配置, 這個按需配置就行了. 還有一些主從參數的優化查下官方手冊就可以了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章