MySQL搭建主从数据库 实现读写分离

首先声明,实际生产中,网站为了提高用户体验,性能等,将数据库实现读写分离是有必要的,我们让主数据库去写入数据,然后当用户查询的时候,然后在从数据库读取数据,故能减轻数据库的压力,实现良好的用户体验!


下面开始上菜:

mysql主从复制配置

mysql主ip: 192.168.0.232
mysql从ip: 192.168.0.233

配置步骤:

1.mysql主服务器
vim /etc/my.cnf   在【mysqld】添加

server-id=1
log-bin=mysqlmaster-bin.log
sync_binlog=1
innodb_buffer_pool_size = 1024M

innodb_flush_log_at_trx_commit=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO
lower_case_table_names=1
log_bin_trust_function_creators=1

2.mysql 从服务器
添加
server-id=2
log-bin=mysqlslave-bin.log
sync_binlog=1
innodb_buffer_pool_size = 1024M
innodb_flush_log_at_trx_commit=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO
lower_case_table_names=1
log_bin_trust_function_creators=1

3.重启主、从服务器的mysql服务

4.登陆主服务器 执行

mysql>GRANT REPLICATION SLAVE ON *.* TO 'systop1'@'192.168.%' IDENTIFIED BY 'systop';
GRANT REPLICATION SLAVE ON *.* TO 'systop2'@'192.168.%' IDENTIFIED BY 'systop';

mysql>FLUSH TABLES WITH READ LOCK;

mysql>SHOW MASTER STATUS;

--------------+
| File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------------+----------+--------------+------------------+-------------------+
| mysqlmaster-bin.000001 |      630 |              |                  |                   |
+------------------------+----------+--------------+------------------+-----
记下file = mysqlmaster-bin.000001
和 Position = 630
从服务器开启复制会用到

5.主服务器上另开一连接(另开一窗口,不到退出第一个窗口,退出后上面的锁表将失效)
执行下面命令将数据库导出

mysqldump -uroot -p -P3306 --all-databases  --triggers --routines --events >mysqlall.sql

6.解锁
UNLOCK TABLES;

7.将导出的数据传到从服务器
scp mysqlall.sql  192.168.X.X:/tmp/

切换到从服务器

8.导入数据
mysql -uroot -p -h127.0.0.1 -P3306  <  /tmp/mysqlall.sql

9.登陆从数据库执行

CHANGE MASTER TO MASTER_HOST='192.168.4.101',MASTER_USER='systop2',MASTER_PASSWORD='systop',MASTER_LOG_FILE='mysqlmaster-bin.000011',MASTER_LOG_POS=120;

10.start slave;

show slave status \G;
查看Slave_IO_Running: Yes
   Slave_SQL_Running: Yes
都显示yes表示启动正常

若报Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' 错误,Slave_IO_Running为no

执行
flush logs;
清空缓冲区数据,此时缓冲区数据都会被写到数据库里

mysql> show master status;

重新执行第9步

测试:在主服务器上进行数据更新,在从服务器上查看

作者介绍:半路学IT,做开发3年,先就职在一家共享单车公司,做后台开发!

我开了一个公众号,欢迎各位有志同道合朋友,关注!不定期分享干活,和我得故事!

MySQL搭建主从数据库 实现读写分离

上一篇:CRL快速开发框架4.4版发布,支持主从读写分离


下一篇:Amoeba实现mysql主从读写分离