[mysqld]
server-id=1
log-bin=mysqlmaster-bin.log
sync_binlog=1
innodb_buffer_pool_size=512M
innodb_flush_log_at_trx_commit=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names=1
log_bin_trust_function_creators=1
修改完之后service mysqld restart
4: 修改从数据库配置文件/etc/my.cnf
[mysqld]
server-id=2
log-bin=mysqlslave-bin.log
sync_binlog=1
innodb_buffer_pool_size=512M
innodb_flush_log_at_trx_commit=1
slave-skip-errors=all (加这句可以跳过复制错误,否则复制错误会导致复制停止)
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names=1
log_bin_trust_function_creators=1
修改完之后service mysqld
restart
5:在主数据库上创建用于主从复制的账户
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101'
IDENTIFIED BY '111111';
6:主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)
flush tables with read lock;
7:查看主数据库的状态(并记录下File字段和Position字段的值,在配置从服务器时有用到)
show master status;
查看file position记录下来
8:备份数据库,迁移数据到从数据库
迁移所有数据库,再导入到从服务器数据库
mysqldump --default-character-set utf8 -uroot -p -B database1
databases2 > /home/alldatabase.sql
备份完之后,从另个服务器上复制这个文件
scp -P 10000 root@192.168.149.25:/home/alldatabase.sql
/home/alldatabase.sql
登录另个服务器MYSQL 直接用source /home/alldatabase.sql (无须先用use 数据库名)
9:解锁主数据库的锁表操作
unlock tables;
10:修改主数据库iptables防火墙,支持从数据库3306可以访问主数据库服务器
-A INPUT -s 192.168.115 -p tcp -m tcp --dport 3306 -j ACCEPT
11:在从数据库服务器上设置主数据库服务器向从数据库服务器同步
change master to master_host =
'192.168.1.100',master_user='repl',master_password='111111',master_log_file='mysqlmaster-bin.000004',master_log_pos=327;
11:启动从数据库复制线程
start slave;
第十四步:查询从数据库的复制线程状态
show slave status \G
如果Slave_IO_Running和Slave_SQL_Running两项都为yes,就表示主从复制配置成功了.
下面可以开始测试配置是否成功了,首先在主数据库的test数据库中新建一张表,然后插入几条数据,然后到从数据库看看是否同步过来了。
注意:当从数据库有大量的查询时,可以暂时将从数据库的复制线程关闭掉,等查询量降下来了,再打开,这样也不会丢失数据。
特别提醒,从服务器数据库不能再执行增加删除更改操作了,否则会导致2边数据不一致,如果从数据库增加了一个键值,这个编号,主数据库同步过来出错了,就导致同步失败,复制进程停止,使用show
slave status查看会发现是NO,需要更改后,重新启用start slave;
配置多个从服务器,只要server-id设置不重复即可,流程重新走一遍即可
另外设置为从数据库后,该服务器上所有数据库都没有写入权限了,如果需要恢复为非从数据库,只要更新/etc/my.cnf里的mysqld下面刚刚添加的那些配置代码删除掉,重启数据库即可。
配置好之后,在从服务器上设置个只读账户,让WEB服务器直接从slave服务器上读取
grant select on artbase.* to user1@192.168.1.22 identified by
"webdfasf#####1111111";
(未实验过,等待添加验证可行性)
如果后期需要添加slave,可以先把其中一个slave show slave status \G;
查看 Master_Log_File:
mysqlmaster-bin.000004
Exec_Master_Log_Pos:
528177656
再stop slave
再备份这个slave数据库,然后
change master to master_host
=
'192.168.1.100',master_user='repl',master_password='111111',master_log_file='mysqlmaster-bin.000004',master_log_pos=528177656;