Mac 通过Docker 配置MySQL的主从数据库同步。 主库负责写,从库负责查询。从库通过bin-log同步复制数据。
- 安装docker:www.docker.com/
- pull mysql
- 准备mysql的配置文件
my-master.cnf
[mysqld]
server-id=100
log-bin=mysql-bin
my-slave1.cnf
[mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
my-slave2.cnf
[mysqld]
server-id=102
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
4、启动master,创建slave用户并授权
docker run -d -e MYSQL_ROOT_PASSWORD=root \
--name mysql-master \
-v /Users/rubin/docker/mysql/my-master.cnf:/etc/mysql/my.cnf \
-p 3307:3306 -v /Users/rubin/docker/mysql/mysql-files:/var/lib/mysql-files/ mysql:5.7
master 创建用户并授权。--》注意master要重新启动,否则授权没生效,从库连不上。
CREATE USER 'user_slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* to 'user_slave'@'%' identified by '123456';
commit;
show master status;
5、启动slave1,并连接master
docker run -d -e MYSQL_ROOT_PASSWORD=root \
--name mysql-slave1 \
-v /Users/rubin/docker/mysql/my-slave1.cnf:/etc/mysql/my.cnf \
-p 3308:3306 -v /Users/rubin/docker/mysql/mysql-files:/var/lib/mysql-files/ mysql:5.7
从库配置,千万注意master_port是master对外映射的端口
stop slave;
change master to master_host='192.168.1.7',
master_port=3307,
master_user='user_slave',
master_password='123456',
master_log_file='mysql-bin.000007',
master_log_pos=154;
start slave;
show slave status;
6、启动slave2,并连接master
docker run -d -e MYSQL_ROOT_PASSWORD=root \
--name mysql-slave2 \
-v /Users/rubin/docker/mysql/my-slave2.cnf:/etc/mysql/my.cnf \
-p 3309:3306 -v /Users/rubin/docker/mysql/mysql-files:/var/lib/mysql-files/ mysql:5.7
从库配置,千万注意master_port是master对外映射的端口
stop slave;
change master to master_host='192.168.1.7',
master_port=3307,
master_user='user_slave',
master_password='123456',
master_log_file='mysql-bin.000007',
master_log_pos=154;
start slave;
show slave status;
注意点:
-
mysql版本安装最好选5.7,5.8的版本我的出现问题,无法同步。
-
mysql和slave版本要一样。
-
配置文件提前写好,关键信息不要写错。
-
show slave status; 这个语句是有延时的,从库启动后,可以等3秒钟去看状态,否则以为一直connecting中,error信息,我卡这上面好几小时,后面等了一会就waiting master状态了。
MySQL做主从同步复制的优点: 1.读写分离,使数据库能支撑更大的并发,在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。 2.发扬不同表引擎的优点。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询。或在myisam slave中建立全文索引,解决innodb无全文索引的弱点。 3.热备slave和master的数据“准实时”同步。
mysql复制技术有以下一些特点: 1.数据分布 (Data distribution ) 2.负载平衡(load balancing) 3.备份(Backups) 4.高可用性和容错行 High availability and failover