当我最初设置我的主对主复制时,我使用了:
binlog-ignore-db=mysql
并一直在同步用户帐户和手动授予。 这只是当时我在使用的方法如何做的。 但是,有没有什么原因,我不应该删除这条线,并允许mysql数据库本身也复制?
如果是这样的话:在我做出改变之前,除了确保所有的授予都是相同的(或者更好地说,整个mysql数据库是相同的),还有什么我应该仔细检查或意识到吗?
完全可以在不知道SQL GRANT命令的情况下为自己授予mysql权限。
示例:这里是使用SQL GRANT从拥有密码ClarkKent的任何地方调用superdba创build拥有完全权限的用户。
GRANT ALL PRIVILEGES ON *.* TO superdba@'%' IDENTIFIED BY 'ClarkKent' WITH GRANT OPTION;
这里是你如何做到这一点没有GRANT命令:
首先,这里是MySQL 5.1.51的mysql.user
mysql> desc mysql.user; +-----------------------+-----------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+-----------------------------------+------+-----+---------+-------+ | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum('N','Y') | NO | | N | | | Insert_priv | enum('N','Y') | NO | | N | | | Update_priv | enum('N','Y') | NO | | N | | | Delete_priv | enum('N','Y') | NO | | N | | | Create_priv | enum('N','Y') | NO | | N | | | Drop_priv | enum('N','Y') | NO | | N | | | Reload_priv | enum('N','Y') | NO | | N | | | Shutdown_priv | enum('N','Y') | NO | | N | | | Process_priv | enum('N','Y') | NO | | N | | | File_priv | enum('N','Y') | NO | | N | | | Grant_priv | enum('N','Y') | NO | | N | | | References_priv | enum('N','Y') | NO | | N | | | Index_priv | enum('N','Y') | NO | | N | | | Alter_priv | enum('N','Y') | NO | | N | | | Show_db_priv | enum('N','Y') | NO | | N | | | Super_priv | enum('N','Y') | NO | | N | | | Create_tmp_table_priv | enum('N','Y') | NO | | N | | | Lock_tables_priv | enum('N','Y') | NO | | N | | | Execute_priv | enum('N','Y') | NO | | N | | | Repl_slave_priv | enum('N','Y') | NO | | N | | | Repl_client_priv | enum('N','Y') | NO | | N | | | Create_view_priv | enum('N','Y') | NO | | N | | | Show_view_priv | enum('N','Y') | NO | | N | | | Create_routine_priv | enum('N','Y') | NO | | N | | | Alter_routine_priv | enum('N','Y') | NO | | N | | | Create_user_priv | enum('N','Y') | NO | | N | | | Event_priv | enum('N','Y') | NO | | N | | | Trigger_priv | enum('N','Y') | NO | | N | | | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | | | ssl_cipher | blob | NO | | NULL | | | x509_issuer | blob | NO | | NULL | | | x509_subject | blob | NO | | NULL | | | max_questions | int(11) unsigned | NO | | 0 | | | max_updates | int(11) unsigned | NO | | 0 | | | max_connections | int(11) unsigned | NO | | 0 | | | max_user_connections | int(11) unsigned | NO | | 0 | | +-----------------------+-----------------------------------+------+-----+---------+-------+ 39 rows in set (0.00 sec)
只需执行这些SQL命令:
INSERT INTO mysql.user SET Host='%',User='superdba',Password=PASSWORD('ClarkKent'), Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y', Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y', Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y', Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y', Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y', Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y', Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y', Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y'; FLUSH PRIVILEGES;
INSERT是一个合法的SQL语句,可以login到二进制日志中。 你想让别人跑这个,并有一个明显的密码沿networking旅行? 坐在主人的二进制日志? 坐在奴隶的继电器日志?
有这个指令
binlog-ignore-db=mysql
防止使用这样的SQL提供mysql权限。 但是,GRANT不能以这种方式停止。 因此,请确保您执行这样的赠款:
SET SQL_LOG_BIN=0; GRANT ...
阻止GRANT从主机到主机的遍历。
我在复制mysql数据库时没有任何问题,但是我的基础架构再一次借助防火墙和代理设备提高了安全性,除了基础设施人员之外,任何人都不可能在任何端口上连接MySQL使用。 它确实增加了额外的便利,因为您只需授予一次权限并将其复制即可。 当它归结为它,只要你已经妥善设置主机不要暴露给任何人比预期(例如你,奴隶等),你应该没问题。
如果您在中间拦截时过度关注人,则始终可以通过SSL发送复制 。