对前面工具mysqlserverinfo, mysqlserverclone, mysqldbexport, mysqldbimport 的实际应用,在工作中,为了诊断问题,新增新功能,测试服务器数据也需要做出相应的更改,这就需要线上数据的副本,来确保解决方案适用于实际的服务器。在这种场景下,使用MySQL主从复制当然也是可行的。
创建一个新的实例,与线上的服务完全一样的选项和数据。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
实例
在开始之前,我们要弄清楚当前运行的实例的配置参数。可以使用mysqlserverinfo 工具来发现配置文件和my_print_defaults 工具来打印出默认的配置。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
shell> mysqlserverinfo --server=root:root@localhost \ --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 localhost: ... connected. ************************* 1. row ************************* server: localhost: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选项需要指定下面的参数:文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
- --log-bin=my_log
- --general_log
- --slow_query_log
- --user=mysql
- --log-error=<path>
并选择新的数据目录,如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
shell> mysqlserverclone --server=root:root@localhost \ --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 localhost. # 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.
接下来,就是导入数据了文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
shell> mysqldbexport --server=root:root@localhost:3306 --export=both --all > data.sql shell> mysqldbimport --server=root:root@localhost:3307 --import=both data.sql # Source on localhost: ... connected. # Importing definitions and data from data.sql. #...done.
如果要复制所有的用户及其权限,需要使用mysqluserclone工具了。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
权限
对所有库的读取权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/
对新数据目录的读写权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

评论