主 192.168.2.10
从192.168.2.11
先配置主mysql
vi /etc/my.cnf
找到 [mysqld] 并在其后添加如下配置:
唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值
server-id=1
二进制日志文件名字,MySQL 主服务器必须启用此配置
log-bin=master-bin-log
MySQL 主服务器中参与主从复制的数据库名;如果有多个数据库,则此参数可以有多个,每行一个,分部对应不同的数据库
binlog-do-db=db_master_backup
MySQL 主服务器中二进制日志文件的索引名
og-bin-index=master-bin-log.index
创建数据库 db_master_backup
create database db_master_backup;
创建用户 backup,并设置密码 backup_123456:
create user ‘backup‘@‘%‘ identified by ‘backup_123456‘;
为用户backup 赋权对 db_master_backup 数据库的所有权限:
grant all on db_master_backup.* to ‘backup‘@‘%‘;
为用户backup 赋本地访问的权限:
grant all privileges on db_master_backup.* to ‘backup‘@‘localhost‘ identified by ‘backup_123456‘;
授权从服务器可以通过 backup 用户访问主服务器:
grant replication slave on *.* to ‘backup‘@‘%‘ identified by ‘backup_123456‘ with grant option;
配置从数据库
vi /etc/my.cnf
# 唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值
server-id=2
# MySQL 从服务器的日志索引文件名
relay-log-index=slave-relay-log.index
# MySQL 从服务器的日志文件名
relay-log=slave-relay-log
创建数据库 db_master_backup
create database db_master_backup;
重启两个mysql服务
查看主服务器的状态:
show master status;
在从服务上执行如下配置:
change master to master_host=‘192.168.2.10‘, // 主服务器IP
master_port=3306,
master_user=‘user_master‘,
master_password=‘Password_Master_123456‘,
master_log_file=‘master-bin-log.000001‘, // 主服务器 master_log_file 的值
master_log_pos=364; // 主服务器 master_log_pos 的值
mysql> stop slave;
mysql> start slave;
执行 show slave status \G
如果有Error reading packet from server for channel ‘‘: Could not find first log file name in binary log index file 报错
解决步骤:
重启master库:service mysqld restart
mysql> show master status;
在从库上执行
mysql> stop slave;
mysql> change master to Master_Log_File=‘master-bin-log.000002‘,Master_Log_Pos=154;
mysql> slave start;
mysql> show slave status\G
在 MySQL master 服务器的 db_master_backup 库中为用户名 t_user 添加数据:
mysql> insert into t_user(id, name) values(1, ‘idea1‘);
mysql> select * from t_user;
在主服务器上建立脚本向t_user中插入数据
#!/bin/bash
i=1;
MAX_INSERT_ROW_COUNT=$1;
while [ $i -lt 100 ]
do
mysql -uroot -p123456 db_master_backup -e "insert into t_user () values (‘$i‘,$i);"
echo "INSERT HELLO $i @@ $d"
i=$(($i+1))
sleep 0.05
done
exit 0
在从数据库中查看数据是否同步
mysql> select * from t_user;