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;

码字不易,打赏一下小弟吧

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页