通常状况下对数据库的操做都是读多写少,也就说对数据库读取数据的压力比较大,咱们采用数据库集群的方案:设置一个主库,负责写数据,其它都是从库,负责读数据。mysql
目标:sql
master:主
slave:从docker
主DB server和从DB server数据库的版本一致
主DB server和从DB server数据库数据一致
主DB server开启二进制日志,主DB server和从DB server的server_id都必须惟一shell
#开启主从复制,主库的配置
log-bin = mysql-bin
#指定主库serverid
server-id=1
#指定同步的数据库,若是不指定则同步所有数据库
binlog-do-db=my_test
复制代码
#执行SQL语句查询状态
SHOW MASTER STATUS
复制代码
#受权用户slave01使用123456密码登陆mysql
grant replication slave on *.* to 'slave01'@'127.0.0.1' identified by '123456';
#刷新配置
flush privileges;
复制代码
#指定serverid,只要不重复便可,从库也只有这一个配置,其余都在SQL语句中操做
server-id=2
复制代码
#如下执行SQL:
CHANGE MASTER TO
master_host='127.0.0.1',
master_user='slave01',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000006',
master_log_pos=1120;
#启动slave同步
START SLAVE;
#查看同步状态
SHOW SLAVE STATUS;
复制代码
#建立目录
mkdir /data/mysql/master01
cd /data/mysql/master01
mkdir conf data
chmod 777 * -R
#建立配置文件
cd /data/mysql/master01/conf
vim my.cnf
#输入以下内容
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #服务id,不可重复
复制代码
#建立容器
docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v
/data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root
percona:5.7.23
#启动
docker start percona-master01 && docker logs -f percona-master01
复制代码
#建立同步帐户以及受权
create user 'name'@'%' identified by 'name';
grant replication slave on *.* to 'itcast'@'%';
flush privileges;
#出现 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and错误解
决方案,在my.cnf配置文件中设置
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
#查看master状态
show master status;
#查看二进制日志相关的配置项
show global variables like 'binlog%';
#查看server相关的配置项
show global variables like 'server%';
复制代码
#建立目录
mkdir /data/mysql/slave01
cd /data/mysql/slave01
mkdir conf data
chmod 777 * -R
#建立配置文件
cd /data/mysql/slave01/conf
vim my.cnf
#输入以下内容
[mysqld]
server-id=2 #服务id,不可重复
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
复制代码
#建立容器
docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v
/data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root
percona:5.7.23
#启动
docker start percona-slave01 && docker logs -f percona-slave01
#设置master相关信息
CHANGE MASTER TO
master_host='192.168.1.18',
master_user='name',
master_password='password',
master_port=3306,
master_log_file='mysql-bin.000002',
master_log_pos=648;
#启动同步
start slave;
#查看master状态
show slave status;
复制代码
show global variable like 'binlog%';
复制代码
binlog_format 属性值默认为 ROW数据库
修改配置:vim
#修改主库的配置
binlog_format=MIXED
#重启
docker restart percona-master01 && docker logs -f percona-master01
#查看二进制日志相关的配置项
show global variables like 'binlog%';
复制代码
此时能够测试同步功能bash