首先声明,实际生产中,网站为了提高用户体验,性能等,将数据库实现读写分离是有必要的,我们让主数据库去写入数据,然后当用户查询的时候,然后在从数据库读取数据,故能减轻数据库的压力,实现良好的用户体验!
下面开始上菜:
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年,先就职在一家共享单车公司,做后台开发!
我开了一个公众号,欢迎各位有志同道合朋友,关注!不定期分享干活,和我得故事!