之前只会用Mysql基本的操作语句,有一天由于某种原因才让我有了对Mysql主从复制进行了解的欲望,人不思不进。
首先,说一下我的经历,之前由于某种原因在不同的Ubuntu系统上装相同版本的Mysql数据库,但是有的资源并不是很好找,所以就把另外一台从设备也装了同样的系统,比较方便。下面说一下具体步骤:
1.准备两台电脑,装同样的Linux系统,我两台电脑装的都是Ubuntu15.04(32位);
2.使用apt-get install mysql-server 直接安装Mysql服务,安装好以后的Mysql版本是 5.6.28,具体的安装过程就不详细列了,很简单;
3.修改mysql配置文件,由于Mysql版本不一样,所以my.cnf配置文件会有些变化,我参考一些Mysql书籍直接在my.cnf下修改配置,之前装过mysql也是直接在my.cnf下直接修改,不过msyql5.6.28版本有些变化,我先找到 /etc/mysql/my.cnf目录下的文件,mysql配置文件都是引用的别的文件夹下的文件,最后找到了/etc/mysql/myssql.conf.d/mysqld.cnf下的文件,现在我们开始修改配置 gedit mysqld.cnf文件(编辑类工具选择其中之一就可以,看自己用哪个顺手),
master主机关键配置:
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log //[必须]启用二进制日志(这里要看你的mysql-bin.log文件在哪里)
server-id=1 //[必须]服务器唯一ID,默认是1,可以取IP最后一段用来区分,也可以按照自己制定规则进行区分(不能重复)
master主机关键配置:
log_bin = /var/log/mysql/mysql-bin.log
//[非必须]启用二进制日志(这里要看你的mysql-bin.log文件在哪里),可以不启用
server-id=1 //[必须]服务器唯一ID,默认是1,可以取IP最后一段用来区分,也可以按照自己制定规则进行区分(不能重复)
4.重启两台机器mysql服务
/etc/init.d/service msyql restart
5.在主服务器上授权slave账户
(1)首先登录master主机的mysql mysql -u root -p password
(2)mysql>GRANT REPLICATION SLAVE ON *.* to 'loginname'@'%' identified by 'password';重点说一下这条语句吧,这是授权给slave账户连接master账户的权限,loginname和password表示连接是用的账户名和密码,% 表示所有主机都可以连接(只要登录账号和密码正确),这样一来master就显得很不安全,所以可以将 % 替换成 相应slave主机的IP地址。说个尴尬的事情吧,最开始配置的时候我把这里理解成了master主机的IP地址,所以导致我在slave主机上连了半天连不上,汗。
6.在master上查看master状态,以便slave连接所用
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
这是配置slave之前最新的master状态,如果操作数据库状态可能发生改变,如果操作了重新查看master状态
7.在slave上配置为master的从服务器
mysql >change master to master_host='192.168.1.152',
->master_user='loginname',
->master_password='password',
->master_log_file='mysql-bin.000004',
->master_log_pos=120; (这里 120 不加引号'')
配置完成后启动slave
mysql
>start slave;
检查slave状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.152
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 213
Relay_Log_File: mysqld-relay-bin.000012
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 213
Relay_Log_Space: 457
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 0b87cdae-2962-11e6-a0b5-5cac4c73ce70
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 这两行必须都为yes,否则运行不成功,检查自己哪里出了问题
8.测试
mysql> create database ceshi;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ceshi |
| mysql |
| performance_schema |
| zyttest |
+--------------------+
5 rows in set (0.00 sec) 在master创建新数据库ceshi,我们查看slave服务器的数据库状态
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ceshi |
| mysql |
| performance_schema |
| zyttest |
+--------------------+
5 rows in set (0.06 sec),这里slave服务器也有了ceshi数据库,完成工作。做了这个工作,希望可以帮助到更多人,同时自己也相当于做了个笔记,有问题的地方,还望指出,共同进步,谢谢观赏!