注意:重新安装多台的数据库,不要克隆已经安装好的虚拟机。
启动mysql数据库,并且设置为自启动。数据库集群的服务器可以互相通信,关闭掉防火墙,配置好相同的密码。
服务器名称 | IP地址 |
---|---|
master1 | 192.168.83.163 |
slave1 | 192.168.83.177 |
在服务器中的/etc/hosts中写入以下内容
192.168.83.163 master1
192.168.83.177 slave1
准备数据
在主服务器中准备一套数据验证数据同步使用
master1的数据
create database master1db;
create table master1db.master1tab (name char(50));
insert into master1db.master1tab values (111);
insert into master1db.master1tab values (222);
开启二进制日志功能
在/etc/my.cnf中另起两行中写到:
在master1中写到
log_bin
server-id=1
systemctl restart mysqld
主服务器(master1)创建复制用户
root用户登录mysql5.7
在mysql中创建复制用户
grant replication slave,replication client on *.* to "rep"@"192.168.83.%" identified by "Mysql@123";
# 这里的192.168.83.%表示192.168.83网段中的所有计算机。
flush privileges;# 刷新数据库
备份主服务器的数据库
退出MySQL,在shell中写入以下命令:
mysqldump -p"Mysql@123" --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-test.sql
主服务器将文件转送给从服务器
# 格式:scp -r 主机1:目标文件路径 目标主机2:文件路径(-r表示递归复制整个目录)
scp -r master1:/2021-02-04-mysql-test.sql slave1:/tmp/
在slave1中查看文件,观察二进制日志的分割点:
回到master1服务器,登录mysql
在测试的表中继续插入数据:
insert into master1db.master1tab values (333);
insert into master1db.master1tab values (444);
测试rep用户是否可以使用
mysql -urep -p"Mysql@123" -h master1
启动服务器序号
vim /etc/my.cnf
systemctl restart mysqld
尝试使用自己的root用户和密码登录到数据库中
mysql -uroot -p"Mysql@123"
手动同步数据
登录到slave1的mysql数据库中
# 暂停记录二进制日志
set sql_log_bin=0;
# 手动同步数据
source /tmp/2021-02-04-mysql-test.sql
设置主服务器
在slave1的mysql数据库中设置主服务器
change master to master_host='master1',master_user='rep',master_password='Mysql@123',master_log_file='master1-bin-000006',master_log_pos=154;
启动从服务器
将slave1的mysql数据库设置为奴隶模式
start slave;
查看启动的状态
show slave status\G;
systemctl stop mysqld# 暂停数据库服务
rm -rf /var/lib/mysql/*# 删除数据库中的文件
systemctl restart mysqld# 重启数据库程序
grep password /var/log/mysqld.log# 查看默认的密码
mysqladmin -p"默认密码" password "新密码"
使用slave1尝试登录mysql
master1主服务器启动二进制日志的功能,并且编写服务器的ID和GTID
vi /etc/my.cnf
另起两行写到:
gtid_mode=ON
enforce_gtid_consistency=1
systemctl restart mysqld
授权复制用户rep
grant replication slave,replication client on *.* to "rep"@"192.168.83.%" identified by "Mysql@123";
flush privileges;# 刷新
备份数据
mysqldump -p"Mysql@123" --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
scp master1:/2021-02-05-20-mysql-all.sql slave1:/tmp/
模拟数据的变化
insert into master1db.master1tab values(888);
测试rep用户是否是可用状态
mysql -h master1 -urep -p"Mysql@123"
启动二进制日志功能,服务器ID和GTID
vi /etc/my.cnf
systemctl restart mysqld
手动恢复数据
set sql_log_bin=0;# 设置二进制日志临时关闭
source /tmp/2021-02-05-20-mysql-all.sql
服务器成功的导入到了slave1中。
设置主服务器
change master to master_host="master1",master_user="rep",master_password="Mysql@123",master_auto_position=1;
start slave;# 奴隶模式