Skip to main content

Command Palette

Search for a command to run...

πŸš€ Making AWS DMS Work with RDS MySQL: What You Really Need to Know

Published
β€’3 min read

Migrating data using AWS Database Migration Service (DMS) is smooth β€” once you get past the tricky setup. If you're using RDS MySQL as a source, here's exactly what you need to do to avoid common validation failures like:

Error Code [10001]: Binary Logging must be enabled for MySQL server


βœ… 1. Create or Use a Custom Parameter Group

Go to the RDS Console β†’ Parameter groups:

  • Create a new MySQL parameter group (you can't modify the default one).

  • Set the following values:

ParameterValue
binlog_formatROW
binlog_row_imageFULL

You won’t see log_bin β€” that’s managed automatically by AWS.


βœ… 2. Attach the Parameter Group to Your RDS Instance

  • Go to RDS β†’ Databases β†’ [your instance]

  • Click Modify

  • Under DB Parameter Group, select the custom group you created

  • Apply immediately or during the next maintenance window

  • Then Reboot the RDS instance


βœ… 3. Enable Backup Retention (This Is Critical)

  • Still in the Modify screen, scroll to Backup Retention Period

  • Set it to at least 1 day

  • This enables binary logging (log_bin), which is required for DMS CDC (change data capture)

If Backup Retention = 0 β†’ log_bin will stay OFF β†’ DMS won’t work.


βœ… 4. Set Up a MySQL User with Required Privileges

Before you begin to work with a MySQL database as a source for AWS DMS, make sure that you have the following prerequisites. These prerequisites apply to either self-managed or AWS-managed sources.

You must have an account for AWS DMS that has the Replication Admin role. The role needs the following privileges:

PrivilegeRequired For
REPLICATION CLIENTCDC tasks only
REPLICATION SLAVECDC tasks only
SUPEROnly before MySQL 5.6.6
SELECTAlways (for source tables)

Grant core permissions:

sqlCopyEditCREATE USER 'dms_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO 'dms_user'@'%';
FLUSH PRIVILEGES;

If you're using MySQL-specific premigration assessments, add these:

sqlCopyEditGRANT SELECT ON mysql.user TO 'dms_user'@'%';
GRANT SELECT ON mysql.db TO 'dms_user'@'%';
GRANT SELECT ON mysql.tables_priv TO 'dms_user'@'%';
GRANT SELECT ON mysql.role_edges TO 'dms_user'@'%'; -- Only for MySQL 8.0.11 and higher

βœ… 5. Verify Your Settings

Run these SQL queries:

sqlCopyEditSHOW VARIABLES LIKE 'log_bin';          -- Should be ON
SHOW VARIABLES LIKE 'binlog_format';    -- Should be ROW
SHOW VARIABLES LIKE 'binlog_row_image'; -- Should be FULL

βœ… 6. Test in AWS DMS

  • Create your DMS source endpoint

  • Use your RDS instance and the dms_user credentials

  • Hit "Test Connection" β€” you should now pass all validation checks


🧠 Bonus Tips

  • Always use the writer instance if your RDS setup has read replicas

  • Don’t forget subnet group, security groups, and port 3306 access

  • For CDC, make sure your DMS task is set to "Full load + CDC"


βœ… TL;DR – What You Need

RequirementValue/Status
Parameter groupCustom
binlog_formatROW
binlog_row_imageFULL
Backup Retentionβ‰₯ 1 day
Binary Logging (log_bin)ON (automatically)
DMS User PermissionsREPLICATION, SELECT, etc.
RDS Instance RoleMust be writer

Let me know if you want this exported to Markdown, PDF, or styled for a blog platform!