主从复制原理
1.主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
2.从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
3.从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
主服务器上修改配置文件
vim/etc/my.cnf
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
创建日志目录并赋予权限
shell> mkdir /var/log/mysql
shell> chown -R mysql.mysql /var/log/mysql
重启服务
shell> systemctl restart mysqld
创建一个专门用于复制数据的用户并授权
Mysql中操作
grant all privileges on *.* to "tom"@"%" identified by "Www.1.com"
grant 权限 on 库名.表名 to "用户名"@"允许登陆的IP地址" identified by “密码”
从服务器上进行测试
shell> mysql -utom -pWww.1.com -h10.18.43.122
shell> mysql -u测试用户 -p密码 -h主服务器IP
将主服务器中的数据导出在文件中
shell> mysqldump -uroot -pWww.1.com --all-databases --master-data=1 >dbdump.db
shell> mysqldump -u用户名 -p密码 --all-databases --master-data=1 > dbdump.db
主服务器中使用 scp 工具,把备份出来的数据传输到从服务器中
scp dbdump.db 10.18.43.177:/root/dbdump.db
配置从服务器
vim /etc/my.cnf
[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
在从服务器上导入数据
mysql -uroot -pWww.1.com < dbdump.db
在从服务器上配置连接到主服务器的相关信息
在数据库中执行
mysql -utom -pWww.1.com -h 10.0.104.122
CHANGE MASTER TO
MASTER_HOST='10.0.104.122',
MASTER_USER='tom',
MASTER_PASSWORD='Www.1.com',
MASTER_AUTO_POSITION=1;
启动从服务器的复制线程以开始复制
mysql> start slave;
查看状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.223.101
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 194
Relay_Log_File: compute1-relay-bin.000002
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
接下来就可以进行主服务器中进行测试(创建数据库或增加表中的信息)
再登陆上从服务器观察变化
网友评论