文章目录
简介
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
- 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
- 提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
- 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能
准备工作
机器准备
准备至少2台机器
- 192.168.52.136 主服务器
- 192.168.52.130 从服务器
安装mysql
- docker命令安装
下面安装命令的 –net=host 必须指定,不然从节点docker容器里mysql无法访问到主节点的网络。
#创建目录存储Mysql挂载文件
mkdir -p /docker/mysql/data /docker/mysql/logs /docker/mysql/conf
#构建并启动mysql
docker run -d \
-p 3306:3306 \
--name mysql \
--restart=always \
#容器就和宿主机共用网络
--net=host \
-v /docker/mysql/conf:/etc/mysql/conf.d \
-v /docker/mysql/logs:/logs \
-v /docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
- yum安装
配置比较多,就不影响大家阅读了,自行百度吧。。
数据准备
创建一个测试用的数据库和表.
create database test;
use test;
CREATE TABLE test (name varchar(20), age int) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
主从同步配置
修改my.cnf文件,
- docker安装的话,文件是你通过-v命令挂载在宿主机的路径,例如 -v /docker/mysql/conf:/etc/mysql/conf.d,则my.cnf则在/docker/mysql/conf下面,默认是没有,需要手动创建 )
- yum安装路径是/etc/my.cnf
主数据库
1.my.cnf文件
[mysqld]
#服务的唯一Id
server-id=136
#开启log-bin二进制日志文件
log-bin=/var/lib/mysql/mysql-bin
#需要备份的数据库名,如果备份多个数据库,重复设置这个选项 即可
binlog-do-db=test
#这个参数一定要加上,否则不会给更新的记录些到二进制文件 里
log-slave-updates=1
#跳过错误,继续执行复制操作(可选)
slave-skip-errors=1
2.重启mysql
#重启mysql,如果是docker安装则是 docker restart mysql.
service mysqld restart
3.得到binlog日志文件名和偏移量
在主数据执行下面的sql语句
show master status;
(此处记住File名称和Position值,后面从服务器配置时需要用到)
4.给用户分配同步的权限
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456';
从数据库
1.my.cnf文件
[mysqld]
server-id=132
2.重启mysql
#重启mysql,如果是docker安装则是 docker restart mysql.
service mysqld restart
3.配置主数据库配置信息
下面都是sql语句
#1.停止slave
stop slave;
#2.配置主节点的host和同步数据用的账号信息,包括同步文件的名称和偏移量
change master to master_host='192.168.52.136',
master_user='root',master_password='123456',master_port=3306,
master_log_file='mysql-bin.000001', master_log_pos=154;
#3.启动slave
start slave
#4.查看slave服务的状态
show slave status
属性 | 描述 |
---|---|
master_host | 主节点的ip地址 |
master_user | 同步数据的用户 |
master_password | 密码 |
master_log_file | 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值 |
master_log_pos | 从哪个 Position 开始读,即上文中提到的 Position 字段的值 |
执行完show slave status命令看到Slave_IO_Running和Slave_SQL_Running这2个为YES表示配置成功了。
测试
在主数据库上面添加修改删除数据,如果都能够同步到从数据库,测试已经完成了。