主从服务器的关系类似于上图说明,主服务器主要是进行写入修改删除操作,从服务器进行读取的操作并且接受主服务器在操作数据库时进行的同步,进而可以减缓主服务器的压力。
在配置的时候由于对linux系统的不熟悉,也是踩了很多的坑,也顺便记录下自己的成长经历。
搭建两台linux虚拟机 都安装好ubuntu16.04的系统(服务器版),这个不会的去百度找找搭建教程
需要将一台作为主服务器(简称master)另一台作为从服务器(简称slave)
root@ubuntu: apt-get install mysql-server
root@ubuntu: apt-get install mysql-client
如有遇到权限不足安装不了的情况请切换成root的账户或者在安装指令前添加 sudo 例如:
root@ubuntu: sudo apt-get install mysql-server
在安装mysql的时候会让输入mysql 的初始密码,要记得自己输入的是什么,因为后面要登录mysql进行操作
安装mysql的操作是主从服务器都需要进行的
使用vim打开/etc/mysql/mysql.conf.d/mysqld.cnf文件
root@ubuntu: vi /etc/mysql/mysql.conf.d/mysqld.cnf
如果没有安装vim则进行安装
root@ubuntu: sudo apt-get install vim
进入文件后主服务器和从服务器进行不同的操作
将 bind-address = 127.0.0.1 注释
在文件的下方添加下列内容并且保存
server_id=1 #server-id 服务器唯一标识
log-bin=master-mysql-bin #log_bin 启动MySQL二进制日志
binlog_ignore_db=mysql
binlog_cache_size=1M
binlog_format=mixed
将 bind-address = 127.0.0.1 注释
在文件的下方添加下列内容并且保存
server_id=2 #server-id 服务器唯一标识
log-bin=slave-mysql-bin
binlog_ignore_db=mysql
binlog_cache_size=1M
binlog_format=mixed
relay_log=mysql-relay-bin
log_slave_updates=1
登录mysql
root@ubuntu: mysql -u root -p
密码是隐藏的,内容为安装mysql时配置的密码
进入后执行下列代码,添加root用户可以使用任意ip和密码为‘123456’进行远程登录
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option (主从)
这一步是主从服务器都要执行的(mysql写指令的时候如果要运行后面需要添加 ;或\g 才会执行指令)
从服务器如果要同步主服务器的数据需要开通权限,这一步只在主服务器上执行
mysql> grant replication slave, replication client on *.* to 'root'@'*' identified by '123456' (主)
刷新主从服务器的授权权限
mysql> flush privileges (主从)
主从服务器授权刷新后就在主服务器上执行下面的指令查看master状态
mysql> show master status (主)
记录 File 和 Position的数据(博主这里分别为master-mysql-bin.000001和 907),后面从服务器要连接时需要
完成后重启主从服务器的mysql
root@ubuntu: service mysql restart (主从) 需要quit先退出mysql
先来到主服务器(master)使用ifconfig查看ip地址
root@ubuntu: ifconfig
比如博主这里主服务器的地址为192.168.235.131(虚拟机的ip地址可能会自己变化,可以尝试自己修改成固定ip地址,这里就不一一赘述了)
记录了主服务器的ip后就可以到从服务器上连接主服务器了
mysql> change master to master_host='192.168.235.131', (主)
-> master_user='root',
-> master_password='123456',
-> master_port=3306,
-> master_log_file='master-mysql-bin.000001', 这里是记录的主服务器File数据
-> master_log_pos=907, 这里是记录的主服务器Position数据
-> master_connect_retry=30;
mysql> start slave; 启动slave
mysql> show slave status; 查看状态
有两个yes就代表成功了
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果 Slave_IO_Running 为connecting时,可能是连接主服务器里面的密码或者用户名输入错误,或者网络未接通
由于博主之前测试的时候是直接克隆的虚拟机,Slave_IO_Running会一直显示未no 是因为mysql的uuid一样了,需要去修改mysql的auto.cnf文件
auto.cnf文件一般在 /var/lib/mysql/auto.cnf 如果没有就用find -name auto.cnf指令搜索一下,把里面的uuid修改保存了重启mysql重启一下slave就可以了
mysql> stop slave; 关闭slave
mysql> start slave; 启动slave
mysql> show slave status; 查看状态
来到主服务器创建一个表,并插入一些数据
mysql> create database db_test; (主)
Query OK, 1 row affected (0.11 sec)
mysql> use db_test;
Database changed
mysql> create table db_test(id int(20),name char(50));
Query OK, 1 row affected (0.51 sec)
mysql> insert into db_test values(1,'test');
Query OK, 1 row affected (0.06 sec)
然后去从服务器查看是否有数据
mysql> show databases; (从)
mysql> use db_test; (从)
mysql> select * from db_test;