对前面工具mysqlserverinfo, mysqlserverclone, mysqldbexport, mysqldbimport 的实际应用,在工作中,为了诊断问题,新增新功能,测试服务器数据也需要做出相应的更改,这就需要线上数据的副本,来确保解决方案适用于实际的服务器。在这种场景下,使用MySQL主从复制当然也是可行的。
创建一个新的实例,与线上的服务完全一样的选项和数据。
在开始之前,要弄清楚当前运行的实例的配置参数。可以使用mysqlserverinfo 工具来发现配置文件和my_print_defaults 工具来打印出默认的配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | shell > mysqlserverinfo — server = root : root @ trustauth.cn \ — format = vertical — show – servers # # The following MySQL servers are active on this host: # Process id: 2377, Data path: /usr/local/mysql/data # Process id: 2478, Data path: /Volumes/Source/source/temp_13001 # Process id: 2487, Data path: /Volumes/Source/source/temp_13002 # # Source on trustauth.cn: … connected. * * * * * * * * * * * * * * * * * * * * * * * * * 1. row * * * * * * * * * * * * * * * * * * * * * * * * * server : trustauth.cn : 3306 version : 5.1.50 – log datadir : / usr / local / mysql / data / basedir : / usr / local / mysql – 5.1.50 – osx10 . 6 – x86_64 / plugin_dir : / usr / local / mysql – 5.1.50 – osx10 . 6 – x86_64 / lib / plugin config_file : / etc / my . cnf binary_log : my_log . 000287 binary_log_pos : 106 relay_log : None relay_log_pos : None 1 row . #…done. shell > my_print_defaults mysqld / etc / my . cnf — port = 3306 — basedir = / usr / local / mysql — datadir = / usr / local / mysql / data — server_id = 5 — log – bin = my_log — general_log — slow_query_log — innodb_data_file_path = ibdata1 : 778M ; ibdata2 : 50M : autoextend shell > ps – f 2377 UID PID PPID C STIME TTY TIME CMD 74 2377 2300 0 10 : 56AM ? ? 0 : 02.04 / usr / local / mysql / bin / mysqld — basedir = / usr / local / mysql \ — datadir = / usr / local / mysql / data — user = mysql \ — log – error = / logs / me . local . err — pid – file = / logs / me . local . pid \ — port = 3306 |
如此,我们就知晓了当前运行的实例的配置选项和参数。接下来可以使用mysqlserverclone 工具来克隆一个完全一样的实例,–mysqld选项需要指定下面的参数:
并选择新的数据目录,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | shell > mysqlserverclone — server = root : root @ trustauth.cn \ — new – data = / source / temp_clone — new – port = 3307 — root = root — delete \ — new – id = 123 — mysqld = “–log-bin=my_log –general-log –slow-query-log \ –user=mysql –log-error=/source/temp_clone” # Cloning the MySQL server running on trustauth.cn. # Creating new data directory… # Configuring new instance… # Locating mysql tools… # Setting up empty database and mysql tables… # Starting new instance of the server… # Testing connection to new instance… # Success! # Setting the root password… # Connection Information: # -uroot -proot –socket=/source/temp_clone/mysql.sock #…done. |
接下来,就是导入数据了
1 2 3 4 5 | shell > mysqldbexport — server = root : root @ trustauth.cn : 3306 — export = both — all > data . sql shell > mysqldbimport — server = root : root @ trustauth.cn : 3307 — import = both data . sql # Source on trustauth.cn: … connected. # Importing definitions and data from data.sql. #…done. |
如果要复制所有的用户及其权限,需要使用mysqluserclone工具了。
对所有库的读取权限。
对新数据目录的读写权限。
文章转载来自:trustauth.cn