site banner

Friday Fun Thread for July 4, 2025

Be advised: this thread is not for serious in-depth discussion of weighty topics (we have a link for that), this thread is not for anything Culture War related. This thread is for Fun. You got jokes? Share 'em. You got silly questions? Ask 'em.

1
Jump in the discussion.

No email address required.

I copied your post into o4-mini ChatGPT, without the last two paragraphs and the PSC idea, and this was spit out after a minute:

—————————

Here’s a proven, zero-Downtime–capable way to copy your Cloud SQL for MySQL database from Project A into Project B without dumping to GCS or exposing it publicly: use Database Migration Service (DMS) in the destination project, treating the source instance as a “self-managed” MySQL endpoint. This leverages private connectivity (VPC peering) so data never traverses the public Internet.

  1. Prepare your source Cloud SQL instance • Enable binary logging & GTID, and use row-based replication on your source: set log_bin, binlog_format=ROW, gtid_mode=ON, and retain logs (expire_logs_days or binlog_expire_logs_seconds) for at least a week. • Create a replication user with REPLICATION SLAVE, REPLICATION CLIENT, SELECT, SHOW VIEW, EXECUTE, TRIGGER, etc., per your migration type .

  2. Enable DMS in the destination project • In Project B, enable the Database Migration Service API and grant yourself the Database Migration Admin role.  • Ensure the DMS service account has compute.networkAdmin so it can set up peering. 

  3. Set up private connectivity (VPC peering) • In Project B, create a Private Connectivity Configuration under DMS → Private connectivity. Select the VPC from Project A that holds your source instance’s private IP; DMS will automatically peer its service-network VPC into that network. 

  4. Create your Source Connection Profile • Still in Project B’s DMS UI, go to Connection Profiles → Create Profile → Source. • Engine: MySQL • Classification: “Self-managed MySQL” (even though it’s Cloud SQL)—this bypasses the same-project restriction . • Host: the private IP (or public IP + authorized network) of your Cloud SQL source. • Credentials: use the replication user you created. 

  5. Create & run the Migration Job • Go to Migration Jobs → Create Migration Job in Project B.

    1. Name your job.
    2. Source: select the connection profile from step 4.
    3. Destination: choose an existing or let DMS create a new Cloud SQL instance in Project B.
    4. Connectivity: pick Private IP and select the private connectivity config you made in step 3.
    5. Type: choose One-time (initial load only) or Continuous (CDC + initial load).
    6. Test, then Start the job. 

DMS will do an initial data copy over the peered VPC, then (if you chose Continuous) apply changes in near real-time.

  1. Cut over to the new instance • Once the initial load is complete and lag is minimal, stop writes on the source, then in the DMS job click Promote. This switches your application to the target instance in Project B. 

Why this works • No GCS buckets or manual dumps needed.
• Data never leaves Google’s private network—no public IP exposure.
• Cross-project works seamlessly by treating the source as self-managed and running DMS in the target project.
• Scales to multi-TB databases with minimal downtime (CDC mode)

———————————-

Is it wrong?

In Project B, create a Private Connectivity Configuration under DMS → Private connectivity. Select the VPC from Project A that holds your source instance’s private IP

IIRC Gemini gave me this too. It's correct except this one line, where it hallucinates that it's possible to select a VPC from another project (you can't), and therefore the whole set of instructions are useless.

This btw is an extremely common failure mode in my opinion. You ask it to do something complex, and it builds a very nice way to do it, except there's one link in the chain that it completely invented out of the thin air. And it totally worked just like that if that link existed, except it does not. It could be an API method, a tool, a UI option, I've encountered a number of things - it all looks very neat, except for one detail that completely ruin the whole thing. And if you note about it, it cheerfully congratulates you on discovering it and even more cheerfully explains why it has always known this doesn't work and can't work. If a person kept doing this to me I'd be infuriated but you can't really blame a bunch of numbers.

I've pretty much given up on asking for troubleshooting help or other non-subjective feedback for this very reason. Even for scripting, it sometimes invents command switches that don't exist or that only work on certain OSes which means I need to correct it 5 times before I get a working script. And then, it often favors complex, messy, and difficult to maintain solutions over simple, elegant ones. Just about the only tech task LLMs are good for at this point is parsing stack traces or weird error messages. They're pretty handy for that.

Any task that can be described as "look up the thing which I describe, possibly in vague terms, among vast array of similar things, and bring it to me" is excellent for it. Using it as a search engine that understands natural language very frequently works. I use it multiple times a day this way and it helps a lot. Same for generating simple scripts that I know exactly what needs to be done, and maybe even have an example of doing similar thing but would have to spend 15-20 minutes tweaking it to do the other thing - it can give it to me in one minute. This is an awesome tool for such cases. But nowhere near "junior programmer" or "fresh law degree graduate" as some claim. At least if I had a junior like that on my team, I'd have a talk with the manager that hired him.