复制数据
- 复制数据结构及数据
mysql>create table new_table_name as select * from old_table_name;
- 只复制结构
mysql>create table new_tabe_name as select * from old_table_name where 1=2;
或者
mysql>create table new_table_name like old_table_name;
- 只复制数据
insert into new_table_name select * from old_table_name;
或者
mysql>insert into new_table_name(column1, column2,...,columnn) select column1,column2,...,columnn from old_table_name;
导出数据到文件
mysql命令行(导出到MySQL sever的路径):
mysql> select * from table_name into outfile "/path/out_file_name";
bash shell(导出到MySQL客户端机器路径):
mysql -h10.123.10.10 -uusername -ppwd -Pport -e "select * from table_name" >> /path/out_file_name
备份数据文件
mysqldump -h10.10.10.10 -uusername -ppwd -Pport mydbname > mydbname.sql
mysqldump -h10.10.10.10 -uusername -ppwd -Pport -B mydbname > mydbname.sql
mysqldump -h10.10.10.10 -uusername -ppwd -Pport --all-databases > all_database.sql
其中,-B参数添加后导出的数据包含create database的语句,导入的时候,新数据库不用实现创建表
主从同步
- master机器开启log-bin记录,并在mysql配置文件中设置唯一server-id, 重启mysql服务
vim my.cnflog-bin=/path/bin-log-name server-id=1
- slave机器的mysql配置中设置与master机器不同的唯一server-id,重启mysql服务。
vim my.cnfserver-id=2
- master机器mysql创建同步专用账号,并对slave机器授权
create user 'repl'@'%' identified by "replpwd"; grant replication slave on *.* to "repl"@"%" identified by "replpwd"; flush privileges;
- master 机器:
- 加锁停止更新
mysql> set global read_only=1;
- 记下当前更新的日志位置,导出当前数据
mysql> show master status\G;
- 导出历史的数据
mysqldump -hmaster-ip -uusername -ppwd -Pport -B mydbname > mydbname.sql
- 解锁表
mysql> set global read_only=0;
- 加锁停止更新
- slave机器:
- 导入从master导出的历史数据
mysql -hslave-ip -uusername -ppasswd -Pport mydbname < mydbname.sql
- 开始同步master的数据
其中,master_log_pos为在master机器记录的log位置(这个点儿之前的数据已经在上一步导入历史数据时导入)mysql> change master to master_host='master_ip',master_user='repl',master_password='replpwd',master_log_gile='file-0001',master_log_pos=12345; mysql> start slave;
- 导入从master导出的历史数据