在Linux(CentOS7)下进行MySQL主从配置
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果是不堪设想的。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:redis、memcached,如果资金丰厚的话,必然会想到架设服务器群,来分担主数据库的压力。这里讲一下利用MySQL主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用。
准备工作
假设有两台Linux(CentOS7)服务器,都装有MySQL 5.x版本的数据库。
如果没有安装,可以参看
里面有安装的详细步骤。
配置Master
修改配置文件
在/etc/my.cnf下
1 | vim /etc/my.cnf |
使用vim编辑器进行编辑,在 [mysqld] 下增加如下配置:
1 | # Mysql-Master Config |
修改完成之后,重启MySQL的服务
授权
1 | mysql -uroot -p |
进入数据库
执行下面的语句创建从机访问主机的用户名、密码并授权
1 | grant replication slave on *.* to 'username'@'slave ip' identified by 'password'; |
查看主库的状态
1 | show master status; |
其中File是主机log-bin的日志文件,Position是主机现在执行SQL的点(这两个很重要,在配置从机时要使用),Binlog_Do_DB是主从同步的数据库,这里没有是因为之前没有指定要同步的数据库。
配置Slave
修改配置文件
修改从机的配置文件和主机差不多,也是在/etc/my.cnf中,增加如下内容:
1 | # Mysql-Slave Config |
重启数据库MySQL服务
启动从机
1 | mysql -uroot -p |
进入数据库
使用如下命令连接Master
1 | change master to master_host='master ip',master_user='username' ,master_password='password', master_log_file='xxxx' ,master_log_pos=xxxx; |
其中master ip 即为主服务器的ip,username、password为之前主机给从机授权的username、password,master_log_file、master_log_pos 为之前在主机中查看状态中的 File、Position。
启动从机
1 | start slave; ##开启从库 (stop slave; 关闭从库) |
查看连接状态
1 | show slave status \G; # Slave_IO_Running,Slave_SQL_Running 都为Yes的时候表示配置成功 |
验证主从
如果主服务器配置时没有指定数据库,可以在主服务器上创建一个数据库,看从机是否可以同步。
如果主服务器配置时指定了数据库,可以在主服务器的的这个库中创建一张表,看从机是否可以同步。