1MySQL主从复制部署
1、安装MySQL,并关闭防火墙和selinux
这一步主服务器和从服务器都是要执行的。
[root@master ~]# yum -y install mariadb mariadb-server
[root@master ~]# systemctl start mariadb.service
[root@master ~]# systemctl enable mariadb.service
//初始化数据库(一路回车即可)
[root@master ~]# mysql_secure_installation
//防火墙和selinux
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# systemctl disable firewalld.service
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@master ~]# sed -i s/SELINUX=enforing/SELINUX=disabled/g /etc/selinux/config
[root@master ~]# setenforce 0
2、主服务器配置
如果主服务器和从服务器数据不一致则需要先备份主服务器上的数据,然后到从服务器恢复数据,然后在执行后面操作。
全备数据库
//主服务器
[root@master etc]# mysqldump -uroot -p123 --all-databases > /opt/all-2021.08.30.sql
[root@master etc]# ls /opt/all-2021.08.30.sql
/opt/all-2021.08.30.sql
//把全备文件传到从服务器进行恢复
[root@master etc]# scp /opt/all-2021.08.30.sql root@192.168.164.132:/root
all-2021.08.30.sql 100% 467KB 45.0MB/s 00:00
//从服务器恢复数据库
[root@slave ~]# mysql -uroot -p123 < /root/all-2021.08.30.sql
......
......
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wjm |
| wjm1001 |
+--------------------+
5 rows in set (0.000 sec)
//恢复成功
在主服务器上配置主从复制,开启二进制日志,设置服务id
[root@master etc]# vim /etc/my.cnf.d/mariadb-server.cnf
//在[mysqld]下面添加内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
log_bin=mysql-bin //开启二进制日志
server_id=1 //服务id号,不可从复,值为0时则表示拒绝服务器连接
innodb_flush_log_at_trx_commit=1 //每个事务提交时立刻写入binlog
sync_binlog=1 // 事务提交后立刻刷新binlog
//重启数据库服务
[root@master ~]# systemctl restart mariadb.service
在主服务器授权一个数据库用户用于复制,创建完成后在从服务器测试登录
//创建名为wjm,密码为wjm123!的用户
GRANT REPLICATION SLAVE ON *.* TO 'wjm'@'%' IDENTIFIED BY 'wjm123!';
Query OK, 0 rows affected (0.001 sec)
//刷新权限
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
3、从服务器配置
在从服务器配置主从复制,设置服务id。
[root@slave ~]# vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
server_id=2 //服务id号,不可重复,为0则拒绝从服务器连接,且要大于主库ID
relay-log = mysql_relay //启用中继日志relay-log
//重启maraidb服务
[root@slave ~]# systemctl restart mariadb.service
登录到从服务器数据库,在数据库中配置主服务器信息
MariaDB [(none)]>change master to
-> master_host='192.168.218.131',
-> master_user='repl',
-> master_password='repl123',
-> master_log_file='mysql_bin.000002',
-> master_log_pos=154;
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.001 sec)
查看从服务器主从复制是否开启
MariaDB [(none)]> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.164.131
Master_User: wjm
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 637
Relay_Log_File: mariadb-relay-bin.000005
Relay_Log_Pos: 936
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
// IO和SQL都为yes表示配置成功
......
......
4、测试
在主服务器创建一个数据库,然后到从数据库查看是否同步成功
//主服务器创建名为wjm88数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wjm |
| wjm1001 |
+--------------------+
5 rows in set (0.001 sec)
MariaDB [(none)]> create database wjm88;
Query OK, 1 row affected (0.001 sec)
MariaDB [wjm]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wjm |
| wjm1001 |
| wjm88 |
+--------------------+
6 rows in set (0.000 sec)
//到从服务器查看是否同步wjm数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wjm |
| wjm1001 |
| wjm88 |
+--------------------+
6 rows in set (0.001 sec)