准备工作:
(1)配置MySQL主从复制(读写分离)之前,需要在主从两台服务器先安装好MySQL5.6。
(2)目前最新的MySQL5.6 GA版本是MySQL5.6.12(点此下载MySQL5.6.12源码包)。
个人推荐Linux(RedHat/CentOS 6.4)源码编译安装,具体可以看本站这篇教程:RedHat/CentOS源码编译安装MySQL5.6.12
(3)注意:
(a)如果你需要用于生产环境,安教程安装MySQL时不要急着做mysql启动操作。建议把mysql初始化生成的/usr/local/mysql/mysql.cnf删除,然后把你优化好的mysql配置文件my.cnf放到/etc下。
(b)建议主备两台服务器在同一局域网,主备两台数据库网络需要互通。
(4)我的环境:
主数据库IP:192.168.100.2
从数据库IP:192.168.100.3
4、修改主数据库的的配置文件:
[mysqld]
server-id=1
log_bin=master-bin.log
sync_binlog=1
#注意:下面这个参数需要修改为服务器内存的70%左右
innodb_buffer_pool_size= 512M
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
修改之后要重启mysql:#/etc/init.d/mysqld restart
5、修改从数据库的的配置文件(server-id配置为大于1的数字即可):
[mysqld]
server-id=2
log_bin=master-bin.log
sync_binlog=1
#注意:下面这个参数需要修改为服务器内存的70%左右
innodb_buffer_pool_size= 512M
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
修改之后要重启mysql:#/etc/init.d/mysqld restart
6、SSH登录到主数据库:
(1)在主数据库上创建用于主从复制的账户(192.168.100.3换成你的从数据库IP):#mysql -uroot -p
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.100.3' IDENTIFIED BY 'repl';
(2)主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标):
mysql>FLUSH TABLES WITH READ LOCK;
(3)然后克隆一个SSH会话窗口,在这个窗口打开MySQL命令行:#mysql -uroot -p
mysql>SHOW MASTER STATUS;
3 +------------------------+----------+--------------+------------------+-------------------+
4 |File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
5 +------------------------+----------+--------------+------------------+-------------------+
6 |mysqlmaster-bin.000001 | 332 | | | |
7 +------------------------+----------+--------------+------------------+-------------------+
8 1row in set (0.00 sec)
mysql>exit;
在这个例子中,二进制日志文件是mysqlmaster-bin.000001,位置是332,记录下这两个值,稍后要用到。
(4)在主数据库上使用mysqldump命令创建一个数据快照:
1、#mysqldump-uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >all.sql
2、#接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导出完成。
(5)解锁第(2)步主数据的锁表操作:mysql>UNLOCK TABLES;
7、SSH登录到从数据库:
(1)通过FTP、SFTP或其他方式,将上一步备份的主数据库快照all.sql上传到从数据库某个路径,例如我放在了/home/yimiju/目录下;
(2)从导入主的快照:
1、#cd /home/yimiju
2、#mysql -uroot -p -h127.0.0.1 -P3306 < all.sql
3、#接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导入完成。
(3)给从数据库设置复制的主数据库信息(注意修改MASTER_LOG_FILE和MASTER_LOG_POS的值):
#mysql -uroot -p
mysql>CHANGE MASTER TO MASTER_HOST='192.168.100.2',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysqlmaster-bin.000001',MASTER_LOG_POS=332;
#然后启动从数据库的复制线程:
mysql>START slave;
#接着查询数据库的slave状态:
mysql> SHOW slave STATUS \G
#如果下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
(4)接下来你可以在主数据库上创建数据库、表、插入数据,然后看从数据库是否同步了这些操作。
(1)配置MySQL主从复制(读写分离)之前,需要在主从两台服务器先安装好MySQL5.6。
(2)目前最新的MySQL5.6 GA版本是MySQL5.6.12(点此下载MySQL5.6.12源码包)。
个人推荐Linux(RedHat/CentOS 6.4)源码编译安装,具体可以看本站这篇教程:RedHat/CentOS源码编译安装MySQL5.6.12
(3)注意:
(a)如果你需要用于生产环境,安教程安装MySQL时不要急着做mysql启动操作。建议把mysql初始化生成的/usr/local/mysql/mysql.cnf删除,然后把你优化好的mysql配置文件my.cnf放到/etc下。
(b)建议主备两台服务器在同一局域网,主备两台数据库网络需要互通。
(4)我的环境:
主数据库IP:192.168.100.2
从数据库IP:192.168.100.3
4、修改主数据库的的配置文件:
[mysqld]
server-id=1
log_bin=master-bin.log
sync_binlog=1
#注意:下面这个参数需要修改为服务器内存的70%左右
innodb_buffer_pool_size= 512M
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
修改之后要重启mysql:#/etc/init.d/mysqld restart
5、修改从数据库的的配置文件(server-id配置为大于1的数字即可):
[mysqld]
server-id=2
log_bin=master-bin.log
sync_binlog=1
#注意:下面这个参数需要修改为服务器内存的70%左右
innodb_buffer_pool_size= 512M
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
修改之后要重启mysql:#/etc/init.d/mysqld restart
6、SSH登录到主数据库:
(1)在主数据库上创建用于主从复制的账户(192.168.100.3换成你的从数据库IP):#mysql -uroot -p
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.100.3' IDENTIFIED BY 'repl';
(2)主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标):
mysql>FLUSH TABLES WITH READ LOCK;
(3)然后克隆一个SSH会话窗口,在这个窗口打开MySQL命令行:#mysql -uroot -p
mysql>SHOW MASTER STATUS;
3 +------------------------+----------+--------------+------------------+-------------------+
4 |File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
5 +------------------------+----------+--------------+------------------+-------------------+
6 |mysqlmaster-bin.000001 | 332 | | | |
7 +------------------------+----------+--------------+------------------+-------------------+
8 1row in set (0.00 sec)
mysql>exit;
在这个例子中,二进制日志文件是mysqlmaster-bin.000001,位置是332,记录下这两个值,稍后要用到。
(4)在主数据库上使用mysqldump命令创建一个数据快照:
1、#mysqldump-uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >all.sql
2、#接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导出完成。
(5)解锁第(2)步主数据的锁表操作:mysql>UNLOCK TABLES;
7、SSH登录到从数据库:
(1)通过FTP、SFTP或其他方式,将上一步备份的主数据库快照all.sql上传到从数据库某个路径,例如我放在了/home/yimiju/目录下;
(2)从导入主的快照:
1、#cd /home/yimiju
2、#mysql -uroot -p -h127.0.0.1 -P3306 < all.sql
3、#接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导入完成。
(3)给从数据库设置复制的主数据库信息(注意修改MASTER_LOG_FILE和MASTER_LOG_POS的值):
#mysql -uroot -p
mysql>CHANGE MASTER TO MASTER_HOST='192.168.100.2',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysqlmaster-bin.000001',MASTER_LOG_POS=332;
#然后启动从数据库的复制线程:
mysql>START slave;
#接着查询数据库的slave状态:
mysql> SHOW slave STATUS \G
#如果下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
(4)接下来你可以在主数据库上创建数据库、表、插入数据,然后看从数据库是否同步了这些操作。