一、原理: 概念 1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。 2. 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。 3. 备库SQL线程读取中继日志中的事件,将其重放到备份数据库之上。 二、图示: 三、准备工作 准备两台主机 ,关闭两台主机的防火墙或者为mysql服务设置规则,并做好host域名解析。 192.168.231.31 master 192.168.231.32 slave 对master操作:
# yum install mariadb mariadb-server -y # systemctl start mariadb # systemctl enable mariadb # mysqladmin -uroot password 'Wiger@5111' # mysql -p'Wiger@5111' MariaDB [(none)]> create database jike1701; MariaDB [(none)]> create table jike1701.t1(id int,name char(20)); MariaDB [(none)]> insert into jike1701 values(1,'chen'); MariaDB [(none)]> insert into jike1701 values(2,'zhang'); MariaDB [(none)]> select * from jike1701.t1; -> ; +------+-------+ | id | name | +------+-------+ | 1 | chen | | 2 | zhang | +------+-------+对slave操作
# yum install mariadb mariadb-server -y # systemctl start mariadb # systemctl enable mariadb # mysqladmin -uroot password 'Wiger@5111'四、“干货开始” 对master操作: 1.添加箭头所指的两行
# vim /etc/my.cnf2.重启
# systemctl restart mariadb3.登录+授权+日志文件
# mysql -p'Wiger@5111' MariaDB [(none)]> grant replication slave,replication client on *.* to 'wiger'@''192.168.231.%' identified by 'Wiger@5222'; MariaDB [(none)]>exit # mysqldump -p'Wiger@5111' --all-databases --single-transaction --master-data=1 --flush-logs > `date +%F`-mysql-all.sql4.发送日志文件到slave主机
# scp 2020-07-01-mysql-all.sql slave:/root5.查看日志文件,出现箭头所指样式即可
# cat 2020-07-01-mysql-all.sql slave:/root对slave操作: 1.测试master授权的用户能否链接上主服务器;要确保可以连接如下代码所示:
[root@slave ~]# mysql -hmaster -uwiger -p'Wiger@5222' Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 5.5.65-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show grants; +--------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for wiger@192.168.231.% | +--------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wiger'@'192.168.231.%' IDENTIFIED BY PASSWORD '*6A3DD188ABAC680C94D1004C93B1171B2965BDD7' | +--------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> exit Bye2.修改配置文件,添加如箭头所在行
# vim /etc/my.cnf3.重启MySQL服务
# systemctl restart mariadb4.复制操作
# mysql -p'Wiger@5111' MariaDB [(none)]> set sql_log_bin=0; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> source /root/2020-07-01-mysql-all.sql Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) ... MariaDB [test]> change master to master_host='master', master_user='wiger',master_password='Wiger@5222'; Query OK, 0 rows affected (0.00 sec) MariaDB [test]> start slave; Query OK, 0 rows affected (0.00 sec) MariaDB [test]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: master Master_User: wiger Master_Port: 3306 Connect_Retry: 60 Master_Log_File: Read_Master_Log_Pos: 4 Relay_Log_File: mariadb-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: Slave_IO_Running: Connecting Slave_SQL_Running: Yes #要出现Yes Replicate_Do_DB: Yes #要出现Yes Replicate_Ignore_DB: Replicate_Do_Table: ...5.查看数据库
MariaDB [test]> select * from jike1701.t1 ; +------+-------+ | id | name | +------+-------+ | 1 | chen | | 2 | zhang | +------+-------+完~
值得注意: master数据库上的数据(增、删、改)可以同步到slave上; slave数据库上的数据(增、删、改)不可以同步到master服务器上; 从而衍生出读写分离的机制; 待下回分解。。。