 Amanda and Pilate. Hey, how's it going? Hello. It's going good. It's going good. We're here today to talk about how to, or not the only way. There's many ways to. But kind of what I've been learning my process, I guess, on migrating WordPress multisites. And specifically, I've been doing a lot of commas in the box open lab stuff. But the nice thing about commas in a box is it is really just WordPress multisite. So this kind of applies to both. And I guess that's maybe thing one to note is, in my experience, it is no different than any other WordPress multisite, which is great. And honestly, a huge credit to the team that works on those projects teams. For sure. I mean, it's definitely its own kind of unique thing. But the fact that it's so different and it does serve a very specific purpose, but then the fact that it's kind of universal to WordPress multisite that makes it so approachable for stuff like this. So that's awesome. Yeah, it is super nice. So I've been doing. I'm not the only one at Reclaim that's done a commas in a box migration or anything. But I've been doing them recently just to kind of have sort of one person focused on that because we actually have just a lot of interest from a lot of different places right now in commas in a box hosting specifically. And so I've done many of the most recent migrations. Just it's kind of just nice to have one person on there to keep to notice patterns and things like that. But again, the nice thing is so far, it's kind of been pretty smooth. Yeah, pretty smooth. I've had very few things. I had one migration I did where they were on a slightly older version of the commas in the box open lab theme. And there was like a menu element that was a little bit broken on the phone, not related to the migration. It was broken before, still broken after. But that's the only thing. And we just fixed it. That was just a small CSS thing. And we could have also just upgraded the theme. That also would have worked. But I wanted to take as few changes as necessary right after our migration. But yeah, so we're going to talk about kind of, I'm going to go through sort of my to-do list when I'm doing a migration. I've got a bunch of notes. I actually just was assembling here a new notes document that's stream safe that doesn't have like database passwords and stuff for people in it. And it's kind of my reference. I basically, when I'm doing a migration like this, I make one of these notes every single time. And I'm referencing it throughout. Because typically, what I like to do for migrations, especially for something like commas in a box or any WordPress multi-site, is I like to do a test migration a week or more before the real thing. And then when it comes to the real thing, it's a lot faster. Because I've run into any weird things that may be the case. And also, most of the files have already been synced. So that will, and we'll talk about that. But that's basically leveraging the power of our sync. So you're pulling updates, but not the whole thing? Yeah, if you have 150 gigs of stuff in your multi-site, the second time I do that sync a week. You're pulling three gigs of changes, maybe? Probably way less than that, honestly. Because it's basically only what people have uploaded in the time since the first sync. So that's huge. I'll be honest. I only said three because I wanted to be in the same order of magnitude as the first number. Makes sense. There isn't, as far as I know, a good way to do that with databases. Like you basically, you don't pull changes on the database. You just do the whole thing again. But the nice thing about databases is they are designed to be relatively fast to export and import, I say relatively. Sometimes relatively is 40 minutes, you know? I mean, it depends on your database setup, too. Well, it depends on the size of the site, right? Yeah. I know recently when we were spinning down UMW blogs, I think Chris did an export on that database and it took an hour and a half. But that was like 200 gigabytes of text, right? Databases just hold text. Yeah, yeah. So much text. Like just an unfathomable amount of text. So to me, I know. I saw an 8-gigabyte database the other day and I was just totally floored. Yeah, that's pretty big. Typically, we're talking under a gig, well under a gig, and then you usually zip them, too. And so we're usually talking like under 100, often like under 150, 200 megabytes once they're zipped. So yeah, we'll go through my process. I have set up a open lab that we're going to migrate. There is almost nothing on the open labs. It's not going to be like a particularly impressive migration, although it'll be nice because it should be fast. So we don't have to literally sit here and twiddle our thumbs waiting for an R-sync to finish. But yeah, I basically just set up a basic open lab. I'm going to actually share my screen here once I get some things ready. So I've got my notes document over here and I've got this is the open lab. We're going to migrate right now. Any chance you could zoom in a little bit, like one or two on both sides? Yeah, perfect. And honestly, we don't need this at the moment, so we'll get back to that. OK, cool. Yeah, so what I've got here is the existing site. This lives on shared hosting. What I'm doing here would apply to migration from basically any Linux-based web host, but I'm going to do it from shared hosting to ReclaimPress. Full transparency, I have not done any migrations to ReclaimPress yet. That's what a live stream is for. Did you say it? Yeah, that's what live streams are for. We'll make some mistakes today. It'll be rad. But theoretically, this shouldn't be that different from migrating to ReclaimCloud or, again, really any host. Most of the stuff I'm doing today will apply to basically any type of migration between hosting platforms with some exceptions. I'm probably going to use PHP MyAdmin today to do the database import and export, which isn't always going to be installed. It will be always available on ReclaimStuff. So you've got it in C-Panel, so for shared hosting or domain of one's own. And you also have access to it in ReclaimCloud or ReclaimPress, so I like to use that. But I will talk about how to do it via the terminal because there are times where you need to do it via the terminal when you've got a large database in particular. And then what we're going to migrate to is this environment I made in ReclaimPress. Now we are going to end up using both the nice interface here. Actually, we're going to be primarily using the other interface, the app.my.reclaimPress, because we need to do a lot of stuff at the terminal. So we'll be doing that. Larger here also, please. No, yeah, that's fine. I'm right. Actually, I do need to do this before I. Maybe one more? I don't know, Amanda. I think definitely bigger. I'm just, it's a weird balancing act in ReclaimCloud because I have to look at it. Because of how big the terminal, yeah. I think you could go one smaller if you wanted, yeah. That's fine. That's good. Cool. All right, so we will be mostly set here on the other side of things here. I will be using both the cPanelTerminal. Actually, you probably don't need the cPanelTerminal. Really just the file manager. So what I've got here is I'm already in the, I wanted to check out, OK, where does this site live that I'm my living? So it's in my shared hosting account. It's at homejadenmeopenlab.jaden.me. That's where it lives right now. So if I pull up my notes, what we're going to do is kind of go through this whole thing one step at a time. So first thing I like to do is I like to just get information about the existing site. And I like to have it handy. So the existing site lives at homejadenmelab.jaden.me. That's what we've just found. I'm going to go in the WP config. And I am going to look at and get details about the database from here. And what I typically will do is I just kind of copy this entire database section so I have it handy. So I will literally just paste this in a doc. Nice. Or later. Oh, I had no city and let you do that. Yeah, that's a markdown. If you have a cold block, you can put different languages here. Usually I'm putting bash, so like this is bash. That's just terminal, basically. But for WordPress stuff, you put PHP because it is a PHP file. And it will highlight it, which is just nice. That's like partially for labeling and partially just to style it, right? It's really just coloring the text. That's all it's really doing in this case. But it's just nice because what I'm looking for. I could, instead of copying that whole section, I could, of course, or I go database, name, and I could paste just this in. That's really all I need. But I am lazy, so I just do the whole thing. I mean, you're rewarded for that. Obsidian makes it extra pretty because you've chosen to take the easy road. I think it's good. There's also another somewhat reason this is sort of a backup too. I'd like to have all of this information here. I'm going to do the same thing for the cloud environment because these will be different, right? So this will have its own username and password. And database host name, character set, should be the same and this should be the same. I guess I don't really need that, but whatever. I like to put all, databases are basically black magic to me. So I don't trust that I know anything about them. So I like to just grab the entire, what does WordPress know about the database section of the file? Just so I have a backup of that too. As well as referencing the name and password and stuff. All right, so I've already created the destination environment. That's where we're going to migrate to. And like I said, I created that in ReclaimPress already. I'm actually going to probably need to zoom out a little bit here, yeah. So I'm going to go in ReclaimPress and go to the file manager and go to all. And we'll check out the wp-config file. One bigger please, maybe. This is also partially just maybe in my eyes per thing. We'll get there. I have to figure it out. Okay. So same thing, I'm going to just copy this whole section. And so I guess I could put the path. It's always going to be the same on a cloud environment. It's always going to be var, www, webroot, root. And yeah, sometimes I throw other information here like the, if I've got an admin password for WordPress itself, I may put that in this section. Yeah, whatever, there are notes. That's really all this is. Okay, so then the next thing I like to do is I like to always use SSH keys. This isn't strictly necessary. We're going to really only need this for the R sync. But technically I could use a password. I could type my password in to do the R sync. But there are times depending on where I'm moving from that keys will be necessary. Like if I'm moving from something that's not on our infrastructure or if I'm moving between two cloud environments, it's often easier to just use a key than like turn on password authentication. And it's just nice. I don't have to type the password. And frankly, it's really not that hard. So I've got linked here an article that is handy, but I really just need to generate the key and then I need to copy the key and paste it into a file on the source side. So from the destination environment. So now we're going to go to the terminal here. I need to do SSH key gen. I like to use the newer key standard. I would recommend that. So that will do that. And I can really just enter through all of these prompts. Then I need to copy the contents of the public key and add it to the authorized key. And that will be actually here. So it'll be in home directory.ssh authorized keys. So I need to copy it. So I'm going to just do SSH. I guess I could, instead of just saying this, it'll look like this. That's... Cat is just going to display the contents of a text file. Okay, okay. So there are many ways you could do this. I could use the file manager and just open it, but we're already in the terminal and it's always going to be located here. So I'm kind of viewing this note as like every single time I do a migration for now and I'm probably going to copy this note and then make specific things. But this will always be the command that will give me the access to the key. So if I paste it in and hit enter, that's the key. So I can copy this whole line. And then on my shared hosting account, go to the file manager. I could do this from the terminal, but I won't really need the terminal for anything else. So I'm not going to. I'm going to go to the .ssh folder and then authorize keys to edit this. And I'm going to add another line. Now, one thing that's tricky here is you'll notice that what I pasted here actually wound up on two lines, three and four. This needs to be all on one line. So that was probably just due to the way I copy this in from the terminal. So zoom. Yeah. I'm getting my audio back. Yeah, man. Oh, I think, no, not anymore. Okay. Okay. Yeah. I heard it for a second, but not anymore. All right, cool. So anyway, so that's set now. So, well, I need to save the file. So just pasting my key here gives the destination environment, so the cloud environment, the ability to SSH in to my shared hosting account. And one thing I should add here is I should test this before I do anything else. So test the test SSH, which will look like this. SSH, it'll be username at server. So in my case, for this one, it will, let me go back to the terminal here. So it's just light speed at node? Or is this a different? Because it's on the destination going to the source. Right, right, right. So it'll be, I know this, I'll cut my head because it's my shared hosting account, right? But SSH, jaden.me at jaden.me. They'll say, hey, you sure you want to connect because it's the first time it's connected? See if it worked. It did. Oh, right, you're on Galaxian now. I am on Galaxian and I am all set. So I can exit out of there. Really just to test. Just so that later when we do an R sync, we know it's gonna work. All right, now we're ready to do like the migration part. So the first thing I actually do before I dump the database or move any files is I like to make a backup, an entire backup of the web route on the cloud. The reason I do this is we are going to move the WordPress install from shared hosting, including its WP config file, each the access files and both those things may need to be updated with, well, they will need to be updated with information that is in the current cloud files and I don't want to overwrite them. I could do our sync commands that like exclude certain files but I actually think it's easier to just make a backup of everything and then I can compare it because sometimes there are times where like, okay, I do wanna keep the majority of the WP config file from the old site except I need to put in the database information from the cloud. So I need to kind of combine the two and we'll do that, I'll show that but instead of making backups and stuff, I find it easier to just let's make a back, sorry, instead of making backups of individual files, I find it easier to just make a backup of the whole folder and then clean out the web root folder and start fresh. So I can literally just run these two commands as is. So we're gonna copy the web root and we're gonna make a backup of it and this will be root underscore back. Can we call whatever I want? That's my convention. What, I'm hitting directory, I don't know what that means. Not to distract you Mm-hmm. Well, you're doing this. I think I understand but I also feel like maybe I don't. So can I try and restate what you said? Which is pull a backup, upload the backup, upload, make all the changes, check things and then see and then do the sync. Yeah, I explained ahead too many steps for it to make any sense to be honest with you. Right now, we're just making a backup of everything in the web root. And this is on the destination. So this is a empty WordPress site, but the reason I'm doing this is database information is in there and HG access file stuff is in there, things like that. So you can grab, making the backup of the blank site means that you can grab that information from the backup. Later. Without having to do any weird stuff. Yes. Okay. Exactly. And I could put this backup anywhere. I choose to just put it next to the original and I call it root underscore back. BAK is like a convention and like Linux stuff that I see from time to time. And so I do that, but you call it whatever you want. Okay. And what I forgot is I need the dash R flag on CP for it to copy folders. Okay. So that's what it was omitting. That's why I admitted. It was like, oh, I admitted that folder for you. It was like, that's all I wanted to copy though. So now I should have two. There we go. And they should be the same. So if I go in there, there's all the stuff. Now that I've made that, I can go into the original and I really don't need any of this stuff. And technically, when I do an R sync, it will overwrite any files that exist. I like to be extra cautious and just clean this out. So there's nothing left over from the original. So we're only, we know all of the files in this folder are exactly the same as what was on the shared hosting side. So I'm going to do that too. This is probably not a necessary step to be perfectly honest with you, but I'm going to do it anyway. So it won't hurt anything. This is empty now. If I try to visit this site, it shouldn't work anymore. Yeah, there we go. So my source site, I guess we never really visited it, but it probably said, mind blown, a blog about philosophy, you know, the default WordPress theme thing, which I kind of wildly hate that they have that in the default theme. Like, why can't it be a more generic site? Anyway, it's just annoying that every time you set up a WordPress site, the first thing you have to do is either change the theme or go and delete blocks from the homepage. Like... This isn't a full site editing complaint, but... Yeah, it's... The 2021, well, the 20, what I'm saying is the 2021 that was like, you're running the Swedish Museum of Design or something, it was like... That was worse actually, because it was like, there was like entire pages built around that too. And they would only exist once you went to the customizer for the first time. It's super annoying. I thought that the default color scheme for that. I hated the default color scheme for that. And I thought... Oh, the tan and red? Yeah. Yeah. It was great. So I... Right, so we are ready to do the database thing. But what I consider the scary part... I like to use... What? Eric's in the chat defending full site editing's honor. I mostly like full site editing. I just cannot imagine why you would put blocks that literally everyone will want to delete on the first install every single time. I can kind of defend it in the context of... Like from an instructional standpoint, you have to interact with the tool, right? But it's very annoying as a professional who installs like probably at least one WordPress site a day. Yeah. And I'm like, God damn it, like whatever. But I actually am kind of, especially in the newest version of WordPress, I think they've made a lot of the tools really, really good. There's still a little complicated, but you can do a lot with it. And I was just talking to the two of you in a different meeting about, I was able to like completely recreate a design just in full site editing. And due to things that aren't really important, I'm gonna have to use a classic theme. And I'm gonna have to make a whole child theme just to do what I was able to do in full site editing, which I'm bummed about because it was pretty easy to do in full site editing. Anyway, I'm mostly a full site editing. As I think Shannon and I have said in community chats, full site editing apologist over here, so. But- Eric has agreed, by the way, that you are right about the amount of deletion. Yeah, it's just, it's a little bit obtuse. Full site editing has no honor. It wants to be Squarespace. How can that be honorable? All right, so we're gonna dump the database. I'm gonna do it two different ways. Usually I will use PHP MyAdmin for smaller sites, just easy, because I can go in here and the database is WP6. So there's gonna be a scary amount of databases in here because I have a whole bunch of- You've only installed six WordPress sites? Well, no, because it'll restart numbering in most cases, you know? So like if you deleted one, if I made it right now, I would go WP4. So- What? There's no four, four and five. I've made six, and this was a six, but between the time that I made this one, I deleted two WordPress sites, four and five. So it will go through and start at the lowest available number. That makes sense. I was so confused at the idea that you've just- Yeah, I made this open lab site literally yesterday for the stream today, but after I made it, I was like, oh, I've got these two sites I don't need anymore, and I deleted them. Oh, okay, okay. Yeah. Anyway, so here is the database, and I will export this and format SQL, quick is, should be fine. So that's an export right there. It's pretty small in this case because there's really nothing on the site. It's only two megabytes. But if it was bigger, I could just zip it up on my computer the way you'd zip anything. I, well, I'm also gonna do this from the terminal though because often for larger sites, this is what I need to do. And so we will go here. What I'm gonna actually do, and this is like, maybe not a great idea for security reasons if you forget, but what I'm gonna do is I'm gonna actually go to the directory of the site, and I'm gonna make my database dump in the web directory so that later when I R-sync the files, the database dump comes along with it. The reason it's not a great idea is you need to make sure to delete these things so that people can't download it later if they happen to try. They would have to know that it's there or guess that it's there, but like. It's not like you're putting it on a live stream on the internet. Well, in this case, I don't really care. There's nothing there. But if you were to do this, it would be really bad because for a real site, because all of people's personal information is in the database, right? So you really don't wanna give people a dump of your database. So up to you, I will say when I'm doing this for customers, I don't do this because I don't trust myself to remember to delete it. So what I do is I will dump the database, download it, and upload it to a not publicly accessible spot on the server. I do that usually via SFTP or a separate R-sync. It's a little bit annoying. If you trust yourself or have it to-do list like I have here, then probably less dangerous, right? But yeah, I waffle on this all the time. So what I need to do, so from the source, I need to dump the database. So I need to get the database user and database name. And that will be, oh yeah, on shared hosting they're gonna be the same actually. Yeah. This will be my command. So what this is gonna do is gonna dump on one command, it's gonna dump the database. It uses quick and skip lock tables. This is just stuff that I got from Gautam told me that he usually uses these, especially for larger database, it can help things go faster. And then it's actually gonna pipe this. This is a pipe character. It's going to take that database dump and immediately zip it up, which is nice. I love that. Yeah, so I will also need a password here. Once I paste it and hit enter, it's gonna ask me for that. And this is, you're not making anything new. You're using the old one. I have to use the old one. Yes, yeah. So I pasted it, it's not gonna show anything because that's how passwords work at the terminal. You need at least one of the process privileges for this operation when trying to dump table spaces. Okay, I've run into this error before and for the sake of a stream that needs to end in 20 minutes, I don't actually remember how to fix this, which is why I normally do this in PHPI, my admin. This is a privilege thing. I think that's related to which privileges we give shared hosting users on the terminal. Yeah, I believe so. And so I think normally what I have to do is do this as root, which I could do, I'm not gonna do that because it's not really applicable to the point of the stream, which is that anyone could follow this. The answer is you would use PHPI admin, right? Which I already did and we'll do here. I was hoping, I should figure out exactly what the work around for that is, but maybe I do plan to try to log some of the details of this for folks who don't wanna watch the entire stream and maybe by that point I'll have figured that out. So anyway, we have done that. So in this case, because it's the database dump is actually on my computer, we're just gonna upload it, right? In using the Reclean Cloud or the Reclean Press File Manager. Okay. So we'll go here. We could really put it anywhere, but I guess I'm gonna go and put it in the temp files if you wanna. Yeah, I'm gonna, for now, I'll just put it next to these. It's not a publicly accessible folder, which is kind of nice. This file manager does have a limitation of 100 megabytes. I was about to say, we were talking earlier about huge databases. Yeah, for large sites, usually I zip them, right? And if it's still more than 100 megabytes, then I use SFTP or R-Sync to get the file up to the cloud environment. So there it is. And now I can go back to my terminal. And if I go back a directory, there it is. So I could restore it from the terminal, I believe, but as long as we're using PHP MyEdmin, we might as well use it for both. So let me, if I go to here and then put colon 8443 on the end of the URL, that'll bring me to PHP MyEdmin. Let me just throw that in my notes, too. Cool. I have a stream open on my other monitor and it's very interesting question mark to basically get instant replay if I miss something useful. Okay, so I can log in. I just need the username and password from the cloud environment now. So this is our database that we already have, right? So this is a fresh WordPress database. It's mostly empty. I am not 100% positive. I think I'm gonna need to drop the tables of this because when I try to import it, it's gonna be like, that table already exists. Let me try, though. So it won't overwrite here? I don't think by default. There's a button I believe I did not press that will tell it to overwrite. So it's weird. What a database dump is, is it's like a script, basically. If I open this, in fact, in a text editor, it's literally commands, SQL commands. And it just describes how to make the database again, including all of its contents. Okay, so it's not, sorry, I was just gonna say. So it's not really a list of values outside of being like, when you make the database, please add this list. It includes that. So if you look at here, it's pretty human, it's kind of human readable. So it says like, all right, here's some things. Set the time zone of this. Then, hey, create a table. Set this garbage. I don't really know what this is, but set the stuff about the table. Use this engine, storage engine. Then create this table, do this. Into that table, put this data into it. Or another table. Into that table, put this, you know. Here's a larger table. The options, right? So it is a complete, like I said, it's a script. It's a complete guide for the database. Make the table in this way. In PHP, my admin, when you dump, and there are flags in the terminal that can do this too. When you dump a database, whoops, this is not the right PHP, my admin. You can tell it, hey, along with this, tell it to drop any tables if they already exist. And I believe this is the checkbox. And I didn't do that. And maybe I just should. Because then what it's gonna do is it's gonna, it's before all of these create statements, it's gonna say first drop table, WP underscore two links. And then that will. So if you did it that way, then you wouldn't have to clear out the database to start with, you'd be able to, it's kind of like an overwrite option. And you get it, get it. You're right. You're right. Where that gets you, is actually, I'm getting the auto-transfer twice again. Yeah, I think it's when you're unmuted. Yeah, it's probably me. I don't know why. All right, so, we'll have to figure out what's going on there, cause that's a weird one. But the problem though, is sometimes, in this case, these tables will be here. There are weird exceptions where, like commons in a box is a good one. Sometimes I've seen commons in a box setups that don't use WP underscore. They use CIAB underscore. And then what you end up is the old ones and the new ones. It's not necessarily a problem, but it's sort of like unnecessary. You've got this old stuff that you don't need. So honestly, what I often will do, is I'll just drop the entire database and create it and it'll be empty. I am, should have written down, I wasn't gonna say, I know there's a way to drop the database. Here we go. So I'm actually just gonna copy this again. A little bigger, please. Sorry. Perfect. Oh, there's just fully of... Troy. Yeah. And this is fine because you made that backup earlier. Well, I didn't make a backup of the database contents. Oh, okay. But we don't need that. We've never will need the... There's nothing on here. Not that I will need, yeah. So now I'm gonna make a new one with the same name. Oh, gosh. I need to zoom out a little bit because I think I'm missing a tab. Oop, I'm not. Okay, I just need to do it right here. So I'll create a new one with the same exact name. This is just, again, one way. As you can see, there are a lot of different ways to get to the same end result. And this is what I like to do, which is just drop the whole database and create a new one. And there we go. So we created a new table. There's nothing in it. And now I'm gonna import. Select file to import. Yeah, whoops. And I really never change this stuff. Hit import. Takes a little bit. For a larger database, you know, especially in PHP, my admin, it'll take a long time. Unknown collation. That's weird. UTF-8 MB-4, 0900. So it didn't like your character set? Or no, it didn't like your collation option. Yeah, I don't really know what collation even is, to be honest with you. In the context of a database. But what I'm gonna look for here is did it make that table? I'm guessing no. This is a weird set. This is a weird thing, not something I've actually ever had happen before. Now the nice thing is this is group, this is buddy press group documents. I don't have any group documents in this site. I know that, but this would normally be something I would be worried about. Buddy press group documents. All right, let's try this again. Let me look at the options here. Oh, so collation, collation defines rules for how text is interpreted. So like you can put in rules for case sensitivity and which characters it's looking at, things like that. Okay. But I'm not going to be able to read fast enough to figure out what it doesn't like about this particular set. Oh yeah, there could be a million things. What's going on here though is basically whatever collation settings of these work on shared hosting, this particular WordPress environment doesn't know about. I'm gonna cheat a little bit and we're just gonna say, let's just use another collation setting. It's probably fine. This is like real text encoding stuff that is unlikely to matter for most use cases. So I can see that all of the other tables are using the same collation setting to accept this one. So it's kind of a weird buddy press thing is what I'm gonna guess. So I can literally just change that because database dumps are just a script and we're gonna do this again. Now I'm gonna need to also drop the database again. Actually, yeah, it probably would just be best too. I think theoretically, if I try to do this again, I could tell it like, oh, only skip all the tables you already know about, but let's just do this again. So we'll drop the database. Oh, I'm already on the right tab. We'll create it again. Eric, you're right by the way, when you mentioned Stack Overflow earlier, Googling solves everything real fast. And this is what I'm talking about with database. This is where I have definitely the least confidence and is somewhat a trial and error for me. There's often little things like this, but my point here is to show like, there are two paths, the terminal or PHP MyAdmin. And the nice thing about PHP MyAdmin is the tools are kind of laid out for me because it's not a terminal application and I'm not very familiar with stuff. I can kind of go in and I could look in, maybe there's some collation settings that I could be looking at and stuff like that too. Yeah. It might have to do also with which SQL versions know about which collation settings. Totally, yeah. Honestly, it could be a lot of different things. Databases are, I was gonna say needlessly complicated. I'm probably more accurate to say needfully complicated. They're complicated for good reasons. Reasons that database experts and admins and computer scientists probably care about, but I don't usually. So this is going, and yeah, I'm actually kind of glad, it is kind of good maybe to sort of document some of the troubleshooting stuff here too. And like, it's not often that I'm literally going in and changing stuff about the database dump, but it does happen from time to time. There we go. So now it's imported. Now we do the R-sync. And R-sync can be scary, but I love R-sync. It's my favorite thing. I'm just, I've done it enough that I'm pretty confident with about it. Confident about it now. So what we're gonna do is we're going to fill in this command here. So R-sync of course is the command. These are the options. A says archive, which does a lot of things in R-sync, but you basically always want it. And it's going to copy the folder and its contents. And it's gonna preserve permissions and ownership data as is relevant. This is almost always in every R-sync command. You're gonna want A. Each means display everything in human readable sizes. So don't display bytes, display gigabytes if we're talking gigabytes or megabytes. Z says use compression, which can speed up transfers on large transfers. It's not always actually faster for smaller transfers. In this case, because I'm going between two locations in our own infrastructure, it's probably actually slower because it's gonna look at every file, compress it and then send it. And, but it's not, this is gonna be such a small transfer. It won't matter anyway. Usually I use Z when doing a migration of a large site. But you could leave it out if you didn't. We're probably not talking about a large, R-sync is so fast that we're probably not talking about a large difference in time anyway. Capital P will show the progress. It basically affects how the output looks. It's just one that I normally use is not 100% necessary. And then the other thing it does is it will resume transfers in progress. So if you're transferring a lot of large files, let's say like there's some files in here that are three gigabytes in size. And for some reason it gets canceled. If you rerun the command and you've been using capital P, it will actually discover, hey, I got one gig into a three gig file and it will pick up at that point and resume, which is super cool. It never hurts to use it in my experience, so I always use it. Do you know what the, I mean, I guess you just said it never hurts, but do you know if there's a reason someone would choose not to do it? I don't. I will just say maybe there's some weird edge cases where you would want to restore, these types of tools get into, always get into low levels of what trade-offs you're making, right? So maybe if you're transferring, say one million tiny files that all add up to 20 gigs, but each file's kilobytes or something. I don't actually know if that math works, by the way. Million is a big number. But you don't care about the partials because like I can retransfer a kilobyte, right? I only care that the whole thing gets over there. And so maybe there's some calculation happening with that partial that takes milliseconds to calculate per file. And you go, well, milliseconds over a million files, I guess would only be one second. So maybe we're talking 10 billion files, like a truly insane number of files. I'm sure at some level, this capital P takes some calculation time where someone's like, I want to turn that off and I'll save two minutes. Okay. You know, it's also possible, like a lot of these tools are designed in such a way where at one time capital P didn't exist. And so for backwards compatibility, they're just adding it. Yeah, they don't want to make it the default behavior. So I always use it, but you don't have to. Yeah, it's, I don't know. I'm not, maybe I'm not quite versed enough in it to know exactly why. Maybe there's even some types of files where it would be like unsafe, like it doesn't do a good job of resuming for some reason. I can't think of why that would be because it's actually using like a checksums. So it's not just looking at the size, it's actually looking at a hash of the contents to decide what to do. But yeah, I don't know. And I can't fully derail this. It's okay. So we need the source username and source server. So, well, not, sorry, not the database. This will be SSH credentials. So it'll be jaden.me at jaden.me. And then the path which I have up here at the top. I'm gonna need to get rid of those back ticks. Oops, oh my gosh. CDN thought it was gonna be clever and did a whole thing. What's happening? I'm not really sure. The square brackets are making it think it's a link, I think. Yeah, let me just grab the middle of that instead of the whole line. I don't know why. Oh, maybe it's saying, oh, if you're copying over this, it's because you actually wanna embed text into that? I think I have a plugin that lets me paste URLs into text, kind of like WordPress lets you do that. And I think that my plugin is working against me right now. So, or the plugin I'm using. Just trying to help, but no, no. All right, home jaden.me. Yeah, that looks right. Always keep an eye on the trailing matches with our sync. So, this one doesn't have a trailing slash, this one does, that's no good. Because what that will do, I'm trying to remember, you want them to match because the unexpected things will happen if they don't. Like you will put the, you'll make a folder called openlab.jaden.me inside of the root, which is not what we want. We want those folders to be the same. So, to make sure, I always make sure that either, neither of them have a slash or both of them do. And it just matters that they match so that the behavior is expected. It doesn't matter. Yeah. Other than that. Yep. All right, and then that's where it is on the cloud. So, this should be our command. I'm zoomed in here, it looks like it's three lines, but it should be just one line. It's not just zoomed in, I guess. It's also because obsidian is putting like margin. Obsidian, yeah, likes to do big margins. But... Hey guys, I got a hop off my microwave. My microphone's weird anyways, but I got a head out. So, enjoy the rest of the stream. Catch you later. All right, all right, y'all. Good to see you. All right. All right, so I will run that command. And it will R sync everything. And that's very fast because it's a small site. And, okay, so now is where our backups of things really comes in handy because what I need to do now is go into the hdaccess file to make sure there's nothing weird in there, basically. Probably not, but, you know, we'll check. And also the wpconfig file, which we will have to put the database information in. Right. Excuse me. So, let me make this a little bit smaller. So, if I open up the old... Root back. Yeah, root back. If I open up the, we're gonna do wpconfig first. And, you know, theoretically, I should be able to just actually grab the same information from up here. Like the full block. That's why I like to do it. Yeah. But I like to just do the whole, like check out the whole thing anyway to see if there's anything else in here. Like sometimes there's some weird detail that's like, oh, that would have been nice to put in there. But in this case, I'm really just gonna need the database block, I'm pretty sure. So, we're just gonna do that. Are there particular red flags that you look for usually? No, it's just like more like I did something and it didn't work. Oh, okay. Sometimes like the database prefix, like sometimes the table prefix is different between the two. Oh, like we were talking about how CBOX might do something different. Yeah. But even that's kind of not a great example because normally that would come through in the database import. And that I would want it to match and it will match in the old wpconfig file. So, I'm trying to think of a time where I needed anything other than the database block and I think it's only ever been that, but I like to be extra cautious. So, it's just nice reassuring to me to know that I have a full copy of what Reclaim Cloud or Reclaim Press did when it deployed WordPress, just in case I need to check it out. This is one weird side effect of the file manager is it doesn't update until you tell it to. Oh, okay. Maybe I didn't. Yeah, something's up here. Did you do the edits in root back instead of no? Oh, here's what happened. There's two lines in my rsync on accident. So, I'm not sure where I copied that. I probably copied it. Weird. Because I didn't give it a destination path. I don't know where it would have put anything. Maybe we find that later and we redo the rsync. Well, we'll definitely do that. What I wanna check is did I just overwrite everything on the old spot? And it looks like no. Timestamps are good. Yeah, okay. Yeah, we're just gonna do it again and I'm gonna fix the thing here. This is, that's really unfortunate. Yeah. Do you also want the flags or? Oh, yeah, I do. This is one of those things where it is probably a good idea. I probably shouldn't do this right from obsidian. It's a good idea to like. Plane text editor. So you can double check, hey, this is one line. There we go. Yeah, that looks good. Oh, that is really fast. It's not quite done yet. I'm just going away from it. I just wanted to check, is it actually going to the right place? And yes, it totally is. Now I'm gonna get rid of that database because I don't need it. And I'm also gonna go over in my source and get rid of it there, because I did forget about it. Not that this is important site, but let's do it anyway. All right, so I'm gonna go into WP config. We're gonna fix the database section of WP config. Like I said, I just do the whole thing, but really it probably only need to change name, username, password and possibly host. The host is gonna have an IP address in it instead of local host. That's just the difference between the cloud and shared hosting. Is that a clipboard? History, yeah. Clipboard. Yeah. PasteBot is a good one. I use a thing called, what is this called? What is this application I'm currently looking at? Raycast. It's a whole replacement for Spotlight that does a lot of different things, including clipboard history, but it also does some fun things. Like I can do a gift search right from here. That's good. Anyway, but PasteBot is a really good tool that just does clipboard history. I think it's like five to 10 bucks. Like it's not free, but it's a good application. There may be some free clipboard history tools. I love clipboard history and honestly, it's maybe a little dangerous for me to pull this up on stream, but this, because there could be some stuff in here I don't want to share, but it's so handy to know that like, oh, I didn't actually accidentally copy something and it got rid of something I wanted. It's like, no, you can go back. You can set this up. I think I have mine set up to remember the last 1,000 things. I copy, which is way more than I would need, right? But it's nice and you can search through it, right? So I can go in here and go like, all right, WP, you know, it'll go through the entire text or even images work in there too. All right, so one thing I forgot is we need to fix the permissions of stuff. So I'm gonna actually move this up here. I'm gonna run these two fine commands to fix the permissions. Sorry, what were you gonna say? I was gonna say that I just double checked it by moving the stream to my big screen and full-screening it and it was, I mean, I guess someone really dedicated could try and like zoom and enhance and stuff, but it was small enough that I was not able to read any of the stuff in your clipboard history. Oh, yeah, there wasn't anything compromising in there. I was kind of looking at it as they brought it up. It's all stuff from the stream. Yeah, I mean, yeah. Your most recent history would be that, but I figured, you know, I was curious, although I didn't need to clean my glasses. So maybe it is just a me thing. Cool, so, excuse me. So yeah, we need to fix permissions because I'm not able to, WP config files are locked down permissions-wise on shared hosting for security reasons. And so I'm not actually able to edit the file until I do that. I like to, as a rule, just do these permissions check just anyway. So might as well do that. That will also fix up the WP config file for us. So now if I refresh this, I should be able to edit this block and save it. Okay, sorry about that. Okay, so we're also gonna look at the HD access file. Probably nothing needs a change in here, but we'll look at it anyway. It's just standard WordPress stuff. What I'm usually looking for in here is the cPanel PHP stuff. So if you've set a custom version of me and cPanel, you don't want that line in here on Reclaim Cloud. And yeah, now's the moment of truth. We are going to, sometimes I haven't figured out if this is me being superstitious or a real thing. Sometimes I restart the web server, but we're gonna try to visit this. Now it is not going to completely work yet because it thinks it's at openlab.jdin.me and that is not what I have mapped in DNS. So we'll talk about that in a second. But what it should do is redirect. Yeah, okay, so it's working. It knows where it wants you to be. It's just. So this is where things diverge and we're not gonna do a ton with this, but typically the last important thing with an openlab or with any migration of WordPress is, okay, well, is the new site gonna be the location? So am I gonna point the domain over here or not? I'm not gonna change where my domain is pointed for this stream because of caching that is not going to be done by the time we're done with the stream, basically. So if I need to put it at a new domain, this gets a little bit tricky with WordPress multi-site, but I do have a command in here. This is what I normally use. WPsearch-replace, all tables, then whatever the old URL is and then whatever the new URL is and then I do a dry run just to check if that's gonna do anything before I run it and then I will remove the dry run flag. That is one way to do it. More often though, I don't actually want to change domain. I just want to look at it before I change DNS. So that is where we do an Etsy host thing. I know some of us that reclaim you skip DNS. I hate skip DNS. It doesn't really work for me. Like it just like literally doesn't work for me most of the time. So I don't know why or if I'm just not using it correctly. So I always just edit my host file, which is- Oh, Etsy host. Yeah, Etsy host. Yeah. I was looking for custom cryptid patches to put on a backpack two weeks ago. And so I was like, oh yeah, Etsy, Etsy. What is that? Maybe if someone can correct me if I'm wrong, Etsy is the how it's spelled by believe it's pronounced Etsy. I don't, at least that's what- My coworkers of mine would always say. I should ask maybe Chris would know. Chris would probably know. So anyway, this is the article. And down here is basically optional stuff. So maybe you need to point your host file. Maybe you need to fix, sometimes we have to fix the upload path depending on how the site was set up. It may have a complete in the WP options table. We may need to adjust the upload path to be var, web, root, root with WP content uploads. This depends though, because sometimes if it doesn't, basically if WordPress doesn't complain to you about it, it's probably set to this WP content dash uploads, which is a relative path to the WordPress directory, that will work. But what we often will see is it'll be set to home, J, me, open lab. And that's not gonna work because this folder doesn't even exist in Reqling Cloud. So we then need to set it to var, web, root, root, WP content uploads. I haven't needed to do this all the time, but it's something to look out for. So I'm gonna point my host file and we're gonna try it out. So what I need is the IP address. What's the name of that support doc? It's called pointing local host file to pre- Oh yes, no, it's right there. Okay. Yeah, no problem. So I'm gonna do this. You could use nano or VIM on the Mac. This is gonna be small. Sorry. Actually, I can zoom this in. All right. So this is on my computer, not on the cloud. So I'm now gonna paste the IP address in and then I'm going to type in the space and then the domain name. So now I'm telling my computer, don't use DNS. Just assume this IP is mapped to this domain name. Now, we use the moment of truth. We're gonna see if this works or not. So we haven't mapped, we haven't done an SSL cert because we haven't pointed domain yet. So it's complaining about the SSL not existing. But there we go. This is it on Reclaim Cloud. So we are good here and I can even check by, I mean, there's a lot of ways I could check, but the host file always works, I should say. But I could log in here, I could make some change to the Reclaim Cloud version. In my case, because this is all kind of disposable stuff, I'm literally just going to go into my C panel and delete the one from shared hosting to kind of prove that we did a migration here. So if you get rid of the original and you can still see it, then you know you're looking in the right place for the new one. Yeah, I'm not suggesting this is procedure for our migration. Don't delete your source, right? Like, because you maybe you messed something up and still need to reference it. This is a little, let's call this a jumping through a hoop of fire moment for the stream, right? You can be sure that if you've edited this file and written it, you've saved it that you're looking at the correct one, but maybe log in and make some changes on the Reclaim Cloud version, switch back and forth, that kind of stuff. But yeah, we're looking at the Reclaim Cloud one. Sweet. And we can also tell too, because the cert is as well as not set up on this one. So we did a successful migration. Even database weirdness aside, where we had to manually change that one thing. I've never seen that before, but I'm glad we were able to kind of get through that. But that is a specific thing. I did say at the beginning of the stream, hey, OpenLab is just WordPress multi-site, which is true. But in that case, we had a weird database thing because of BuddyPress, which is a vital part of Cummins and Evox, OpenLab and Cummins and Evox Classic. So I've not seen that before though. So I'm not really sure why we ran into that this time. Well, didn't you say this was your first time going to ReclaimPress instead of to just somewhere else? True. Yeah, could be related. Yeah. So that would be something I look out for because I'm about to do a couple more of these. So yeah, but you know, we did, I think we started late. I'm trying to remember. We started about 10 minutes late. Yeah, so yeah, hour and six minutes. Yeah. Which is not bad. I know that that's kind of long, but typically migrations are long. I will say they are, I'm happy we did this because this is a pretty in-depth look. Like we explained a lot of this in a pretty low or high level of detail, you know? And a couple other things I'll go here right before we sign off. I mentioned this upload path thing. I would look at that in PHP, my admin. So what I'm talking about is I'm gonna go to WP options. WP options is always the best. Yep, the table. Everything's in there. Yes. You can, yeah, make it as many rows as possible and just search for it probably. Yeah. Let me zoom out a little bit for a second and then I can filter. I think that. There we go. So this is one case where I do need to adjust this. Yeah. So you can see it's set to the shared hosting URL. That's not gonna work. So I'm gonna need to change this to var www web root, root. And then we'll be. And it's totally fine with that because this site is in the root folder now. Yes. Yeah. Also you can blame, I'm sure that I wasted at least 20 to 25 minutes of this stream. You can blame the link on me. Well, these are supposed to be conversational, right? Yeah. So the whole reason I like doing these in this way is that you and Amanda can ask questions and make sure that I'm getting all of the detail out there to make this relevant because it's easy especially when I have it. Like the doc helps me keep on task but then if I miss something from the doc, like if I forgot to put it in there in the first place I'm gonna skip right over it because it's like, oh, I've got a text file over here. We're following, you know? So anyway, thank you for joining me. Hopefully this is helpful or at least interesting to someone. I'm gonna try to turn this into a blog post as well to kind of just like throw some of these commands on a webpage so you don't have to look at them in a video, but yeah, this is how I do WordPress multi-site migrations. Soup to nuts, start to finish, so. Yeah. All right. Yeah, we'll see everybody next time. See you later.