mysqldump, bir veritabanının şemasını ve verilerini CREATE TABLE ve INSERT deyimlerini içeren bir SQL dosyası olarak dışa aktarır ve bu dosyayı hedef örnekte yeniden oynatır. Veri hacminiz küçükse veya geçiş sırasında uzun süreli kesintileri kabul edebiliyorsanız bu yöntemi kullanın.
Hizmet kesintisi olmadan geçiş yapmak için bunun yerine Data Transmission Service (DTS) hizmetini kullanın. DTS, sürekli çoğaltmayı ve minimum kesinti süresiyle yük devretmeyi destekler.
Önkoşullar
Başlamadan önce aşağıdaki işlemleri tamamladığınızdan emin olun:
RDS örneği için bir IP adresi izin listesini yapılandırdınız
RDS örneğinin genel uç noktasını elde ettiniz
RDS örneğinde hedef veritabanlarını ve hesapları oluşturdunuz
Kurulum talimatları için bkz. ApsaraDB RDS for MySQL kullanma genel iş akışı.
Kullanım durumları
Aşağıdaki durumlarda mysqldump doğru bir seçimdir:
Veri hacmi küçüktür — dışa ve içe aktarma işlemleri bakım pencereniz içinde tamamlanır
Kesinti süresi kabul edilebilir — tutarlılığı garanti etmek için dışa aktarma sırasında kaynak veritabanına yazma işlemleri durdurulmalıdır
Sürekli çoğaltmaya gerek yoktur — tek seferlik mantıksal bir kopya yeterlidir
Sıfır kesinti süresiyle yük devretmeye veya devam eden çoğaltmaya ihtiyacınız varsa bunun yerine DTS hizmetini kullanın.
Kullanım notları
Geçişten sonra, kendi kendine yönetilen MySQL örneğindeki tüm tablo adları RDS örneğinde küçük harfle saklanır. Büyük/küçük harfe duyarlı tablo adlarını korumak için aşağıdaki yöntemlerden birini kullanın:
Yeni örnekler: Bir RDS for MySQL örneği oluştururken, Table Name Case Sensitivity ayarını Case-sensitive olarak belirleyin.
Mevcut örnekler: ApsaraDB RDS konsolunda
lower_case_table_namesparametresini0değerine ayarlayın. Ayrıntılar için bkz. ApsaraDB RDS for MySQL örneğinin parametrelerini değiştirin.
lower_case_table_names parametresini 0 değerine ayarladıktan sonra bunu tekrar 1 değerine döndürmeyin. Bu işlem ERROR 1146 (42S02): Table doesn't exist hatasına neden olabilir ve iş yüklerinizi ciddi şekilde etkileyebilir. RDS örneğiniz MySQL 8,0 çalıştırıyorsa, örnek oluşturulduktan sonra lower_case_table_names parametresi yeniden yapılandırılamaz.
mysqldump ile verileri geçirin
Aşağıdaki adımlar bir Linux ortamını kullanır. Aynı komutlar macOS Terminal veya Windows Komut İstemi'nde de çalışır.
Adım 1: Kendi kendine yönetilen MySQL örneğinden verileri dışa aktarın
Dışa aktarmayı çalıştırmadan önce kaynak veritabanındaki tüm yazma işlemlerini durdurun. Dışa aktarma sırasında verilerin güncellenmesi döküm dosyasını bozabilir.
Dışa aktarma için kullanılan hesabın gerekli izinlere sahip olması gerekir. Daha fazla bilgi için bkz. resmi MySQL belgeleri.
Şemayı ve verileri dışa aktarın (saklı yordamlar, tetikleyiciler ve işlevler hariç):
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <db_name> --skip-triggers --skip-lock-tables > /tmp/<db_name>.sql
Örnek:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers --skip-lock-tables > /tmp/testdb.sql
Bunun yerine bir RDS for MySQL örneğinden verileri dışa aktarmak için ana bilgisayar adı, kullanıcı adı ve veritabanı adını ilgili RDS değerleriyle değiştirin.
--default-character-set=utf8 bayrağı, döküm dosyası için karakter setini belirler. Kaynak veritabanı farklı bir karakter seti kullanıyorsa bu bayrağı buna uygun şekilde ayarlayın. Döküm dosyasının karakter seti ile hedef örneğin karakter seti arasındaki uyumsuzluk, içe aktarmadan sonra bozuk metne neden olur.
Saklı yordamları, tetikleyicileri ve işlevleri dışa aktarın:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <db_name> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/*/' > /tmp/<db_name>Trigger.sql
Örnek:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdbTrigger.sql
Kaynak veritabanında saklı yordam, tetikleyici veya işlev yoksa bu komutu atlayın.
Adım 2: Dışa aktarılan dosyaları bir ECS örneğine yükleyin
1. Adımdaki .sql dosyalarını, RDS örneğine erişebilen bir Elastic Compute Service (ECS) örneğindeki /tmp dizinine yükleyin.

Kendi kendine yönetilen MySQL örneği zaten bir ECS örneğinde çalışıyorsa bu adımı atlayın.
Adım 3: Dosyaları RDS örneğine içe aktarın
Aşağıdaki komutları ECS örneğinde çalıştırın. Yer tutucuları RDS bağlantı bilgilerinizle değiştirin.
mysql -h <RDS endpoint> -P <port> -u <account> -p <database> < /tmp/<db_name>.sql
mysql -h <RDS endpoint> -P <port> -u <account> -p <database> < /tmp/<db_name>Trigger.sql
Örnek:
mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdb.sql
mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdbTrigger.sql
| Yer Tutucu | Açıklama | Örnek |
|---|---|---|
<RDS endpoint> |
RDS örneğinin genel uç noktası | rm-bpxxxxx.mysql.rds.aliyuncs.com |
<port> |
RDS örneğinin bağlantı noktası | 3306 |
<account> |
RDS hesabı (yetkili hesap veya okuma ve yazma izinlerine sahip standart hesap) | testuser |
<database> |
Hedef veritabanı adı — RDS örneğinde zaten mevcut olmalıdır | testdb |
Hedef veritabanı henüz mevcut değilse oluşturmak için bkz. Veritabanlarını yönetin.
Adım 4: Geçişi doğrulayın
RDS örneğinde oturum açmak için DMS kullanın ve tabloların, satır sayılarının ve verilerin doğru göründüğünü onaylayın.
Sonraki adımlar
Veri geçişi yöntemlerine genel bakış — mysqldump'u DTS ve diğer geçiş yaklaşımlarıyla karşılaştırın
ApsaraDB RDS for MySQL örneğinin parametrelerini değiştirin —
lower_case_table_namesve diğer örnek parametrelerini ayarlayın