4、重启两台服务器的mysql
/etc/init.d/mysql restart 5、在主服务器上建立帐户并授权slave:
GRANTREPLICATION SLAVE ON *.* TO 'slave'@'172.16.1.53' IDENTIFIED BY 'password';
GRANTREPLICATION SLAVE ON *.* TO 'slave'@'172.16.1.52' IDENTIFIED BY 'password'; 6、登录主服务器的mysql,查询master的状态 mysql>show masterstatus;
7、配置从服务器Slave:
mysql> CHANGEMASTER TO MASTER_HOST='172.16.1.54',
master_user ='slave',
master_password ='password', master_log_file ='mysql-bin.00002', master_log_pos = 191;
8、检查从服务器复制功能状态:
mysql>show slave status \G
9.Mysql开启远程登录
(1)通过MySQL用户去限制访问
权限系统目的:
MySQL基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限,今天介绍的就是如何开启和关闭Mysql远程访问
MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。
附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。
权限系统原理:
MySQL权限系统保证所有的用户只执行允许做的事情。当你连接MySQL服务器时,你的身份由你从那儿连接的主机和你指定的用户名来决定。
连接后发出请求后,系统根据你的身份和你想做什么来授予权限。
MySQL在认定身份中考虑你的主机名和用户名字,是因为几乎没有原因假定一个给定的用户在因特网上属于同一个人。
例如,从office.com连接的用户joe不一定和从elsewhere.com连接的joe是同一个人。
MySQL通过允许你区分在不同的主机上碰巧有同样名字的用户来处理它:你可以对joe从office.com进行的连接授与一个权限集,而为joe从elsewhere.com的连接授予一个不同的权限集。
阶段1:服务器检查是否允许你连接。
阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。
例如,如果你从数据库表中选择(select)行或从数据库删除表,服务器确定你对表有SELECT权限或对数据库有DROP权限。 如果连接时你的权限被更改了(通过你和其它人),这些更改不一定立即对你发出的下一个语句生效。MySQL权限是保存在cache中,这个时候就你需要执行
flush privileges;
开启远程访问:
- 更新用户 mysql>use mysql; mysql>update userset host = "%" where user = "root"; mysql>flushprivileges;
- 添加用户 mysql>use mysql; mysql>insert intouser(host, user, password) values("%", "root",password("yourpassword")) mysql>grant all privilegeson *.* to 'root'@'%' with grant option #赋予任何主机访问数据库权限 mysql>flush privileges; -关闭远程访问: mysql> use mysql; mysql>update userset host = "localhost" where user = "root" and host="%"; mysql> flushprivileges; - 查看用户权限: mysql> useinformation_schema; mysql> select *from user_privileges; 查看当前mysql用户: mysql>use mysql; mysql>select user, hostfrom user; 更新用户: mysql> updatemysql.user set password=password('新密码') whereUser="phplamp" and Host="localhost"; mysql> flushprivileges; 删除用户: mysql> DELETEFROM user WHERE User="phplamp" and Host="localhost"; mysql> flushprivileges;
user host指定方法:
Host值可以是主机名或IP号,或’localhost’指出本地主机。
你可以在Host列值使用通配符字符“%”和“_”。
host值’%’匹配任何主机名,空Host值等价于’%’。它们的含义与LIKE操作符的模式匹配操作相同。例如,’%’的Host值与所有主机名匹配,而’%.mysql.com’匹配mysql.com域的所有主机。
##############################################################################################
MySQL从5.1升级至5.6会出现 Mysql创建用户出错:ERROR1054 (42S22): Unknown column 'plugin' in 'mysql.user'
mysql> create userqzwx identified by 'qzwx';
ERROR 1054 (42S22):Unknown column 'plugin' in 'mysql.user'
经排查,发现是5.16版本mysql.user表的没有plugin,而升级数据库的时候,mysql.user表没有升级,才导致字段缺少,可以通过以下方法修改mysql.user表:
mysql>use mysql;
mysql>ALTER TABLEuser ADD Create_tablespace_priv ENUM('N','Y') NOT NULL DEFAULT 'N' AFTERTrigger_priv;
mysql>ALTER TABLEuser ADD plugin CHAR(64) NULL AFTER max_user_connections;
mysql>ALTER TABLEuser ADD authentication_string TEXT NULL DEFAULT NULL AFTER plugin;
mysql>ALTER TABLEuser ADD password_expired ENUM('N','Y') NOT NULL DEFAULT 'N' AFTERauthentication_string;
############################################################################################
MYSQL5.1升级至5.6
mysql> show slave status\G
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Slave_IO_Running: No
.....
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log:
'Client requested master to start replication from impossible position' 查看Mysql Log
[root@host03log]# cat mysqld.log
2016-09-07 10:31:3518240 [ERROR] Error reading packet from server: Could not find first log filename in binary log index file (server_errno=1236)
2016-09-07 10:31:3518240 [ERROR] Slave I/O: Got fatal error 1236 from master when reading datafrom binary log: 'Could not find first log file name in binary log index file',Error_code: 1236
2016-09-07 10:31:3518240 [Note] Slave I/O thread exiting, read up to log 'log-bin.000002',position 120
2016-09-07 10:31:3518240 [Warning] Slave SQL: If a crash happens this configuration does notguarantee that the relay log info will be consistent, Error_code: 0
2016-09-07 10:31:3518240 [Note] Slave SQL thread initialized, starting replication in log'log-bin.000002' at position 120, relay log './mysqld-relay-bin.000001'position: 4 解決方法: [root@host03 log]#mysqlbinlog /opt/mysql/data01/mysql-bin.000001 > test.txt [root@host03 log]#cat test.txt
/*!50530 SET@@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET@@session.max_insert_delayed_threads=0*/;
/*!50003 SET@OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/; # at 4
#160907 10:31:34server id 43 end_log_pos 120 CRC32 0xeec57cc1 Start:binlog v 4, server v 5.6.32-log created 160907 10:31:34 at startup
# Warning: this binlogis either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
BnzPVw8rAAAAdAAAAHgAAAABAAQANS42LjMyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAGfM9XEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAcF8
xe4=
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added bymysqlbinlog */;
/*!50003 SETCOMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET@@SESSION.PSEUDO_SLAVE_MODE=0*/;
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_log_file='mysql-bin.000001',master_log_pos=4;
Query OK, 0 rows affected (0.06 sec)