环境规划
主机名 | 内网ip | 外网ip | mysql版本 |
---|---|---|---|
db01 | 172.16.1.61 | 10.0.0.61 | mariadb-5.5.60 |
db02 | 172.16.1.71 | 10.0.0.71 | mariadb-5.5.60 |
在这里db01是主,db02是备
部署数据库主从同步
两台服务器全都操作
下载mysql服务
yum install -y mariadb-server
启动并加入开机自启
systemctl start mariadb
systemctl enable mariadb
1.在db01中/etc/my.cnf中添加
vim /etc/my.cnf
[mysqld]
server-id=1 #保证与db02不同即可
log-bin=mysql-bin
添加完如下
![9469008-56f9df0b8c5390c0.png](https://i-blog.csdnimg.cn/blog_migrate/cd97e5c0692376362d40f43f79c315c6.png)
image.png
修改完之后重启数据库
进入数据库
[root@db01 ~]# mysql
进入数据库创建同步用户
grant replication slave on *.* to 'tongbu'@'172.16.1.%' identified by '123456';
创建一个同步用户,授权所有数据库,授权172.16.1.0/24这个网段,用户密码为123456
查看授权用户,并删除空白用户
MariaDB [(none)]> select user,host from mysql.user;
+--------+------------+
| user | host |
+--------+------------+
| root | 127.0.0.1 |
| tongbu | 172.16.1.% |
| root | ::1 |
| | localhost |
| root | localhost |
| | db01 |
| root | db01 |
+--------+------------+
7 rows in set (0.00 sec)
MariaDB [(none)]> drop user ''@localhost;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user ''@db01;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
查看mariadb当前正在使用的二进制日志.
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 245 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
记录file名称和position
在lb02中/etc/my.cnf中添加
vim /etc/my.cnf
[mysqld]
server-id=2 #保证与lb01不同即可
log-bin=mysql-bin #可以用show variables like '%log_bin%',查看log_bin是否开启
修改完如下
![9469008-e9069639ca4d42a7.png](https://i-blog.csdnimg.cn/blog_migrate/179e5efc53e53ccd5b88ee1a1e206a38.png)
image.png
重启数据库
systemctl restart mariadb
进入数据库,配置同步主服务器的参数
change master to master_host='10.0.0.51', #主数据库ip
-> master_user='tongbu', #备份用户名
-> master_password='123456', #备份用户密码
-> master_log_file='mysql-bin.000001', #二进制日志文件名
-> master_log_pos=245; #二进制日志位置
![9469008-f2180c0dc1ed3bac.png](https://i-blog.csdnimg.cn/blog_migrate/a16c7d7f1b2afa529c23b47def99c06b.png)
image.png
总结一条命令如下
MariaDB [(none)]> change master to master_host='172.16.1.71',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=245;
启动slave同步进程
start slave;
查看同步状态
show slave status\G;
如果这两行显示yes则同步成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
![9469008-e4d90c75d7b8ad5c.png](https://i-blog.csdnimg.cn/blog_migrate/fb1e36041e2afa3f959b1d3fcaf34cdb.png)
image.png
如果不是yes,可以查看最下面的常见故障解析
进行测试
数据库(主)查看创建一个新的数据库,并检查
MariaDB [(none)]> create database oldboy;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| performance_schema |
| test |
| wordpress |
+--------------------+
6 rows in set (0.56 sec)
数据库(备)查看检查同步结果
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| performance_schema |
| test |
| wordpress |
| zabbixdb |
+--------------------+
7 rows in set (0.00 sec)
这样主从同步就部署成功了,
如果说主数据库里原来已经存在数据库了。那么在做主从复制之前,先要把数据库进行备份,然后恢复到备用的数据库中,如果不这样做的话,同步的时候会出现数据库的表找不到的情况。
常见故障
故障一,配置同步参数时提示
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first
翻译的结果:此操作不能在正在运行的从属服务器上执行;先运行后停止从动件
意思是说已经在同步了,如果想配置同步参数需要先把他已经再进行的同步停止
解决
使用stop slave;停止同步 在执行 change master命令
故障二
Slave_IO_Running: Connecting
解决
下面列举几种可能的错误原因:
1.网络不通
2.账户密码错误
3.防火墙
4.mysql配置文件问题
5.连接服务器时语法
6.主服务器mysql权限
故障三
Slave_SQL_Running: No
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
一般是事务回滚造成的:
解决办法:
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;