主数据库
1、找到/ect/my.conf 修改 server-id= #ID必须在所有主从数据库对应服务器中唯一。不能重复。
2、在my.conf找到[mysqld]
添加以下参数(如已存在则根据需要修改)
log-bin=mysql-bin #开启了二进制文件
binlog_do_db=net112php #主从复制的数据库
binlog_ignore_db=mysql #不参与数从复制的数据库,例如mysql
binlog_checksum=none #mysql主从复制版本高
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3、创建账号并授权slave,也可通过phpmyadmin创建,注意创建的账号需要对要复制的数据库最起码有读取权限。一般只需要读权限,如果仅配置从库用。
mysql>grant replication slave on *.* to 'net112'@'%' identified by '123456';
4、刷新用户权限
FLUSH PRIVILEGES;
6、mysql>show master status //查看主数据库状态
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 | 1302006 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
从服务器
1、找到/ect/my.conf 修改 server-id= #ID必须在所有主从数据库对应服务器中唯一。不能重复。
2、在my.conf找到[mysqld]
添加以下参数(如已存在则根据需要修改)
#max_allowed_packed=10M #缓冲区的最大长度。
replicate-do-db=net112php #设定需要复制的数据库(多数据库使用逗号,隔开)
replicate-ignore-db=mysql,performance_schema,information_schema #设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
#replicate-do-table 设定需要复制的表
#replicate-ignore-table 设定需要忽略的复制表
#replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符
#replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符
3、执行命令
mysql>change master to
master_host='192.168.85.128',
master_port=3306,
master_user='net112',
master_password='123456',
master_log_file='mysql-bin.000007',
master_log_pos=1302006;
//注意不要断开,1302006数字前后无单引号,为前面主服务器状态值中的Position。master_log_file
对应前面主服务器中状态值中的File ,master_host
主服务器IP,master_port主服务器数据库远程端口,master_user 主服务器授权账号,master_password
主服务器授权密码。
4、确保从库能通过其他服务器远程访问(例如:放行3306端口,确保另一台服务器上的主库能通过3306端口连接上从库)
5、 Mysql>start slave; //启动从服务器复制功能,启动后,如果成功则可查看到从服务器数据库中多了一个数据库net112php
8、检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222 //主服务器地址
Master_User: mysync //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
......
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)
,网上这种说法是错误的,本人运行查看这个状态的时候,根本没有Slave_IO_Running的参数, Slave_SQL_Running
也是空白的,没任何东西,可能安装的系统差异吧,请操作者以实际结果为准,比如从数据库是否创建成功了,主数据库修改数据,从数据库是否更新了。
问题:
1、创建数据库未成功,报错,某数据表不存在之类。请检查主服务器和从服务器的第2点加粗部分,然后重启从服务器。
stop slave;
reset slave;
start slave;
2、如还是未成功,可能sql_slave_skip_counter参数设置问题,执行以下命令。
set global sql_slave_skip_counter=1;
stop slave;
reset slave;
start slave;
3、如还是未成功,重启服务器,可能前面修改my.conf文件的配置未生效,重启后,重新从从服务器配置的第3点开始操作。其他问题,请百度,本人暂时没遇到过其他问题。
4、数据库连接问题,连接数据库的账号,主从数据库可分别创建其他账号,前面配置的账号,仅为同步复制数据库用。
思考:
数据库同步肯定是需要时间的,那么如果配置双主多从复制数据库,怎么避免数据库数据不一致问题呢?
自己找答案吧