String replace SQL
Published July 14th, 2023 under General
Have you ever needed to string replace your entire SQL database, but not been able to figure out how to do it without dumping the whole database, string replacing the file and reimporting it? Well I did. But today I nutted out a solution for this, which you can see in the bash script below 🙂 Just replace the database name, user, password, and the search/replace text and run it via bash string-replace-db.sh
. Then many minutes later (or hours if you have a huge database), it will have string replaced EVERYTHING! To state the obvious, you should backup the database before trying this 😉
string-replace-db.sh
#!/bin/bash DATABASE='dbname' USER='dbuser' PASS='dbpasswd' SEARCH='somethingtosearch' REPLACE='whattoreplaceitwith' # Fetch all tables TABLES=$(mysql -u $USER -p$PASS $DATABASE -e 'show tables' | awk '{ print $1}' | grep -v '^Tables' ) for t in $TABLES do # Fetch all columns COLUMNS=$(mysql -u $USER -p$PASS $DATABASE -e "show columns from $t" | awk '{ print $1}' | grep -v '^Field' ) for c in $COLUMNS do mysql -u $USER -p$PASS $DATABASE -e "update $t set $c = replace($c, '$SEARCH', '$REPLACE')" done done