一、准备服务器,我们这里准备三台服务器02、03、04,并安装好mysql,安装步骤这里不再详诉。
二、配置主从关系
假设02这台服务器是主数据库,03与04为从数据库
主数据库名为shop_db
03服务器上数据库名为user_db
04服务器上数据库名为product_db
这三个数据库表结构一致,只是数据库名称不一样
当然一般不考虑分库分表的情况下,这个三个数据库名是一致的,我们这里就以分库分表为例
1、首先在主数据库shop_db创建测试表格
create database shop_db; use shop_db; create table user ( user_id int not null primary key auto_increment, user_name varchar(20) not null, UNIQUE KEY `user_name` (`user_name`) ) engine=innodb default charset=utf8;
2、创建好后,需要用mysqldump命令备份一下刚才创建的这个数据库
mysqldump --master-data=2 --single-transaction --routines --triggers --events -uroot -p shop_db > /home/bak_shop_db.sql
--master-data mysql当前二进制日志点
--single-transaction 保证在同一个事物中进行的备份
--routines 存储过程备份
--triggers 触发器备份
--events 事件备份
备份好后,我们打开这个数据库文件看一看
cat /home/bak_shop_db.sql
注意这一句
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000022', MASTER_LOG_POS=729;
它表示,从服务器同步的时候只会同步729节点之后的数据,之前的数据我们已经初始化了。
3、我们将这个主服务器的数据库备份文件拷贝到从服务器
可以使用lrzsz,也可以使用scp命令
scp /home/bak_shop_db.sql root@192.168.0.191:/home
登录从服务器192.168.0.191
我们可以看到已经把数据库备份文件拷贝过来了
在从服务器上继续操作,导入数据库表结构
create database user_db; mysql -uroot -p user_db< /home/bak_shop_db.sql
4、进入主服务器,配置用户
#创建同步账户
create user 'db_repl'@'%' identified by '123456';
#为同步账户授权
grant replication slave on *.* to 'db_repl'@'%';
5、进如从服务器,配置复制链路
change master to master_host="192.168.0.190",master_user="db_repl",master_password="123456",master_log_file='mysql-bin.000022', MASTER_LOG_POS=729;
#复制过滤,解决数据库名不一致的问题
#mysql中可以如下修改 change replication filter replicate_rewrite_db=((shop_db,user_db)); #如果是MariaDB,则在配置文件的server-id下添加 replicate-rewrite-db=shop_db->user_db
修改mysql配置文件
如果不知道mysql配置文件放在何处,可以用以下命令查找
cd mysql/bin ./mysqld --verbose --help|grep -A 1 "Default options"
将配置文件中的server-id换成和主服务器不一致的ID号,全局唯一配置,
配置log-bin
log-bin=mysql-bin
6、启动测试
从服务器进入mysql
start slave;
查看状态
show slave status \G
如果以上两项是yes状态,说明主从配置已经成功了,可以开始测试了。
如果Slave_IO_Running是no的状态,那么可能是主服务器没有对外开放mysql端口,
firewall-cmd --zone=public --add-port=3306/tcp --permanent systemctl restart firewalld.service
停掉主从同步
stop slave; reset slave all;
reset salve all是清除掉所有的slave信息,如果要重新启动同步
需要重新到主服务器执行
show master status \G
然后回到从服务器
change master to master_host="192.168.0.190",master_user="db_repl",master_password="123456",master_log_file='mysql-bin.000026', MASTER_LOG_POS=326; start slave;
访客评论