mysql集羣搭建及性能調優之一(集羣搭建)

本文講解mysql的集羣搭建

1. docker安裝並啓動三臺mysql

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD="123456" \
 --privileged=true -v /c/Users/Public/conf/my.cnf:/etc/mysql/my.cnf  \
 --name=mysql1  mysql:5.6.17

參數說明:
-d 後臺運行容器並打印容器id
-p 指定端口映射 主機:容器
-e 設置環境變量
–privileged 是否容器有足夠的權限(root)
-v 指定目錄映射
–name 指定容器名稱

docker exec -it mysql1 /bin/bash

第二臺

docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD="123456" \
 --privileged=true -v /c/Users/Public/conf/my.cnf:/etc/mysql/my2.cnf  \
 --name=mysql1  mysql:5.6.17

第三臺

docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD="123456" \
 --privileged=true -v /c/Users/Public/conf/my.cnf:/etc/mysql/my3.cnf  \
 --name=mysql1  mysql:5.6.17

2. 創建基礎庫並設置可訪問用戶

分別在三臺mysql上建立test數據庫

create database test character set utf8 collate utf8_general_ci;

設置mysql用戶及權限

grant all privileges  on test.* to culter@'%' identified by "123321";
flush privileges;

3. 主從配置

主:192.168.0.97:3306
從:192.168.99.100:3307
192.168.99.100:3308
192.168.99.100:3309

3.1 主服務器配置

# 主從複製需要開啓binglog
log-bin=mysql-bin

# 二進制格式推薦 mixed
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id	= 1

設置複製權限:

grant replication slave on *.* to 'culter'@'%' identified by '123321';

如果指定數據庫 會報錯:

mysql> grant replication slave on test.* to 'culter'@'%' identified by '123321';

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> grant replication slave on *.* to 'culter'@'%' identified by '123321';
Query OK, 0 rows affected (0.00 sec)

展示主服務器狀態:

show master status;

在這裏插入圖片描述
下面的從庫配置會使用到:

3.2 從服務器配置

step 1 更改配置文件

分別在從服務器中的my.cnf中添加 將id分別改爲 2,3,4

[mysqld]

log-bin=mysql-bin
binlog_format=mixed
server-id = 2

step 2 配置同步主庫源

然後我們對三臺機器分別設置

change master to master_host='192.168.0.97',master_user='culter',master_password='123321',master_log_file='mysql-bin.000003',master_log_pos=204;

完整語法:

 CHANGE MASTER TO
 MASTER_HOST='192.168.0.97',
 MASTER_USER='culter',
 MASTER_PASSWORD='123321',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='mysql-bin.000001',      
 MASTER_LOG_POS=325,
 MASTER_AUTO_POSITION=0;

報錯:

ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

注意:由於我使用的docker安裝的,並指定了my.cnf的映射目錄,導致 /etc/mysql/my.cnf 無論怎樣
更改權限,都無法加載,會報如下錯誤(必須進入mysql對應的容器內部執行命令才能看到)

root@8251dd588c9c:/usr/local/mysql# mysql -uculter -p
Warning: World-writable config file '/etc/mysql/my.cnf' is ignored

這個錯誤的原因是因爲mysql認爲my.cnf的操作權限是777,任何人都能操作,所以存在安全隱患,就直接忽略了這個配置文件。
但是由於我們無法更改,只能新建一個 /etc/my.cnf 然後重新加入上面的內容,並重啓容器

命令執行順序

docker exec -it mysql1 /bin/bash
vim /etc/my.cnf

內容

[mysqld]

log-bin=mysql-bin
binlog_format=mixed
server-id = 2

重啓

docker restart mysql1

step 3 啓動主從複製

mysql> slave start;

報錯:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slave start' at line 1
mysql> start slave ;
Query OK, 0 rows affected (0.01 sec)

根據部分mysql版本的原因,可能會出現命令的不一致,需要更改命令爲:

mysql> start slave;

碼字不易,打賞一下小弟吧

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